From e9d31443f01eda2ecee66dbc25f154a6949a9c97 Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Sat, 11 Apr 2026 20:19:12 +0200 Subject: reorganize the API from type DB to type Store --- store.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 store.go (limited to 'store.go') diff --git a/store.go b/store.go new file mode 100644 index 0000000..4ab0f4b --- /dev/null +++ b/store.go @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2026 Stefan Majewsky +// SPDX-License-Identifier: Apache-2.0 + +package oblast + +import ( + "reflect" + + "go.xyrillian.de/oblast/internal" +) + +// Store is the main interface of this library. +// It holds information on how to read and write data into record type R, and can also be used to execute autogenerated queries if the respective [PlanOption]s were provided during [NewStore]. +type Store[R any] struct { + plan internal.Plan +} + +// NewStore initializes a store for record type R. +func NewStore[R any](dialect Dialect, opts ...PlanOption) (Store[R], error) { + var popts internal.PlanOpts + for _, opt := range opts { + opt(&popts) + } + plan, err := internal.BuildPlan(reflect.TypeFor[R](), dialect, popts) + return Store[R]{plan}, err +} + +// MustNewStore is like [NewStore], but panics on error. +func MustNewStore[R any](dialect Dialect, opts ...PlanOption) Store[R] { + store, err := NewStore[R](dialect, opts...) + if err != nil { + panic(err.Error()) + } + return store +} -- cgit v1.2.3