| title | API Reference | |||
|---|---|---|---|---|
| description | Function documentation for vecna | |||
| author | zoobzio | |||
| published | 2025-01-01 | |||
| updated | 2025-01-14 | |||
| tags |
|
Function documentation for vecna. For type definitions, see Types Reference.
func New[T any]() (*Builder[T], error)Creates a schema-validated Builder for metadata type T.
Type Parameter:
T— A struct type representing your metadata schema
Returns:
*Builder[T]— Filter builder for the schemaerror—ErrNotStructif T is not a struct
Example:
type Metadata struct {
Category string `json:"category"`
Score float64 `json:"score"`
}
builder, err := vecna.New[Metadata]()
if err != nil {
log.Fatal(err)
}func (b *Builder[T]) Spec() SpecReturns the extracted schema for documentation or export.
Returns:
Spec— Schema metadata including type name and field specifications
Example:
spec := builder.Spec()
fmt.Println(spec.TypeName) // "Metadata"
for _, f := range spec.Fields {
fmt.Printf("%s: %s\n", f.Name, f.Kind)
}func (b *Builder[T]) Where(field string) *FieldBuilder[T]Begins a filter condition on a field.
Parameters:
field— Field name (fromjsontag or Go field name)
Returns:
*FieldBuilder[T]— Builder for chaining operators
Errors:
- If field doesn't exist, the returned
FieldBuildercarries an error that surfaces viaFilter.Err()
Example:
filter := builder.Where("category").Eq("tech")func (b *Builder[T]) And(filters ...*Filter) *FilterCombines filters with logical AND.
Parameters:
filters— Child filters to combine
Returns:
*Filter— Filter that matches when all children match
Example:
filter := builder.And(
builder.Where("category").Eq("tech"),
builder.Where("active").Eq(true),
)func (b *Builder[T]) Or(filters ...*Filter) *FilterCombines filters with logical OR.
Parameters:
filters— Child filters to combine
Returns:
*Filter— Filter that matches when any child matches
Example:
filter := builder.Or(
builder.Where("category").Eq("tech"),
builder.Where("category").Eq("science"),
)func (b *Builder[T]) FromSpec(spec *FilterSpec) *FilterConverts a FilterSpec to a validated Filter.
Parameters:
spec— Serializable filter specification
Returns:
*Filter— Validated filter (checkErr()for validation errors)
Example:
spec := &vecna.FilterSpec{
Op: "eq",
Field: "category",
Value: "tech",
}
filter := builder.FromSpec(spec)
if err := filter.Err(); err != nil {
log.Fatal(err)
}func (fb *FieldBuilder[T]) Eq(value any) *FilterCreates an equality filter (field == value).
func (fb *FieldBuilder[T]) Ne(value any) *FilterCreates a not-equal filter (field != value).
func (fb *FieldBuilder[T]) Gt(value any) *FilterCreates a greater-than filter (field > value).
Errors: Returns filter with error if field is not numeric.
func (fb *FieldBuilder[T]) Gte(value any) *FilterCreates a greater-than-or-equal filter (field >= value).
Errors: Returns filter with error if field is not numeric.
func (fb *FieldBuilder[T]) Lt(value any) *FilterCreates a less-than filter (field < value).
Errors: Returns filter with error if field is not numeric.
func (fb *FieldBuilder[T]) Lte(value any) *FilterCreates a less-than-or-equal filter (field <= value).
Errors: Returns filter with error if field is not numeric.
func (fb *FieldBuilder[T]) In(values ...any) *FilterCreates a set membership filter (field IN (values...)).
Example:
filter := builder.Where("category").In("tech", "science", "art")func (f *Filter) Op() OpReturns the filter operator.
func (f *Filter) Field() stringReturns the field name. Empty string for logical operators (And, Or).
func (f *Filter) Value() anyReturns the comparison value. Nil for logical operators (And, Or).
func (f *Filter) Children() []*FilterReturns child filters for logical operators. Nil for field conditions.
func (f *Filter) Err() errorReturns any error from filter construction. Recursively checks children and returns the first error encountered.
Example:
filter := builder.And(
builder.Where("valid").Eq("x"),
builder.Where("invalid").Eq("y"),
)
if err := filter.Err(); err != nil {
// err: vecna: field not found: invalid
}