Documentation
¶
Overview ¶
Package schema provides utilities to build the schema tree for the entity model.
Index ¶
- Variables
- func GetPathForField(field, parent string) string
- func GetSchemaNameForModel[T any](model T) string
- type EntityModelSchema
- type EntityModelSchemaCache
- type EntityModelSchemaOptions
- func (o *EntityModelSchemaOptions) SetBSONInlineParent(bsonInlineParent bool) *EntityModelSchemaOptions
- func (o *EntityModelSchemaOptions) SetParentBSONFields(parentBSONFields []string) *EntityModelSchemaOptions
- func (o *EntityModelSchemaOptions) SetXIDRequired(xidRequired bool) *EntityModelSchemaOptions
- type SchemaFieldProps
- type TreeNode
Constants ¶
This section is empty.
Variables ¶
var EntityModelSchemaCacheInstance = newEntityModelSchemaCache()
EntityModelSchemaCacheInstance is the singleton instance of EntityModelSchemaCache.
Functions ¶
func GetPathForField ¶
GetPathForField returns the schema tree path for the field.
func GetSchemaNameForModel ¶
GetSchemaNameForModel returns the default schema name for the model.
Types ¶
type EntityModelSchema ¶
type EntityModelSchema struct {
// Root is the root node of the schema tree.
// Root node is a dummy node, it's not a real field in the model. Actual doc parsing starts from the children of root node.
Root TreeNode
// Nodes is a map used to quickly access the [TreeNode] by path.
Nodes map[string]*TreeNode
}
EntityModelSchema holds the schema tree for the entity model.
func BuildSchemaForModel ¶
func BuildSchemaForModel[T any](model T, schemaOpts schemaopt.SchemaOptions) (*EntityModelSchema, error)
BuildSchemaForModel builds the schema tree for the given model.
func (*EntityModelSchema) IsEqual ¶
func (s *EntityModelSchema) IsEqual(c *EntityModelSchema) bool
Used only for debugging in tests. Reason: reflect.DeepEqual doesn't provide enough information about the difference. Replace reflect.DeepEqual with this function in test file and start a debugger to get more information.
type EntityModelSchemaCache ¶
type EntityModelSchemaCache interface {
GetSchema(schemaName string) (*EntityModelSchema, error)
SetSchema(schemaName string, schema *EntityModelSchema)
}
EntityModelSchemaCache is the cache implementation than can hold EntityModelSchema.
It has the following to main use cases -
- Avoid re-computing the schema for the same entity model.
- Fetch the relevant schema based on the discriminator key in case of union type models to validate the bson doc fetched from MongoDB.
type EntityModelSchemaOptions ¶
type EntityModelSchemaOptions struct {
// contains filtered or unexported fields
}
func NewEntityModelSchemaOptions ¶
func NewEntityModelSchemaOptions() *EntityModelSchemaOptions
func (*EntityModelSchemaOptions) SetBSONInlineParent ¶
func (o *EntityModelSchemaOptions) SetBSONInlineParent(bsonInlineParent bool) *EntityModelSchemaOptions
func (*EntityModelSchemaOptions) SetParentBSONFields ¶
func (o *EntityModelSchemaOptions) SetParentBSONFields(parentBSONFields []string) *EntityModelSchemaOptions
func (*EntityModelSchemaOptions) SetXIDRequired ¶
func (o *EntityModelSchemaOptions) SetXIDRequired(xidRequired bool) *EntityModelSchemaOptions
type SchemaFieldProps ¶
type SchemaFieldProps struct {
// Type holds the struct field type or the underlying type in case of pointer.
Type reflect.Kind
// IsPointer is used to identify pointer type of fields.
IsPointer bool
// Transformers are the transformations that needs to be applied on the field while building the bson doc.
Transformers []transformer.Transformer
// Options are the schema options for the field.
Options fieldopt.SchemaFieldOptions
}
SchemaFieldProps are the possible field properties.
type TreeNode ¶
type TreeNode struct {
// Path is used to identify the ancestor chain. Used for debugging purposes.
Path string
// BSONKey is the translated bson key.
BSONKey string
// Key is the struct field name. Used for debugging purposes.
Key string
// Props contains the field properties.
Props SchemaFieldProps
// Children contains the child nodes.
// Array is used instead of map to preserve the order of fields. Fields in bson doc should always match with the schema tree order.
Children []TreeNode
}
TreeNode is a node in the schema tree.
func GetDefaultSchemaTreeRootNode ¶
func GetDefaultSchemaTreeRootNode() TreeNode
GetDefaultSchemaTreeRootNode returns the default root node of a schema tree.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package fieldopt provides custom options for schema fields.
|
Package fieldopt provides custom options for schema fields. |
|
Package metafield defines and provide functions on custom meta fields for the schema.
|
Package metafield defines and provide functions on custom meta fields for the schema. |
|
Package transformer provides custom transformers for schema fields.
|
Package transformer provides custom transformers for schema fields. |