// 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 }