// SPDX-FileCopyrightText: 2026 Stefan Majewsky // 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{}