blob: e62fe52d0db8501f998c1cb5295f80301a5e1096 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
// SPDX-FileCopyrightText: 2026 Stefan Majewsky <majewsky@gmx.net>
// SPDX-License-Identifier: Apache-2.0
package oblast
// seal is a private type that appears in interface definitions below,
// to ensure that only types from this package can implement these interfaces.
type seal struct{}
// TableInfo is a marker for struct types that correspond to tables.
// Put this as an embedded field on your struct type and put the table name in the field's `db` tag.
//
// // For example, this struct type...
// type LogEntry struct {
// oblast.TableInfo `db:"log_entries"`
// oblast.PrimaryKeyInfo `db:"id"`
// ID int64 `db:"id,auto"`
// CreatedAt time.Time `db:"created_at"`
// Message string `db:"message"`
// }
// // ...corresponds to this table schema (shown here in PostgreSQL syntax):
// CREATE TABLE log_entries (
// id BIGSERIAL NOT NULL PRIMARY KEY,
// created_at TIMESTAMPTZ NOT NULL,
// message TEXT NOT NULL
// );
//
// This marker is required for all operations that use autogenerated SQL statements.
type TableInfo struct{}
// isTable implements the IsTable interface.
func (TableInfo) isTable(seal) {}
// IsTable is implemented by all types that have an embedded field of type [TableInfo].
type IsTable interface {
isTable(seal)
}
// PrimaryKeyInfo is a marker for struct types that correspond to tables with a primary key.
// Put this as an embedded field on your struct type and list the columns of the primary key in the field's `db` tag,
// as shown on the example for type [TableInfo].
//
// This marker is required for all UPDATE and DELETE operations that use autogenerated SQL statements.
type PrimaryKeyInfo struct{}
|