schema

package
v1.52.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 17, 2025 License: MIT Imports: 8 Imported by: 0

README

Package schema

Пакет schema реализует генерацию и настройку JSON схем для структур Go с поддержкой кастомных генераторов и тегов валидации.

Types

CustomGenerator

Функция для кастомной генерации схемы по полю структуры.

customSchema

Внутренняя структура для управления реестром кастомных генераторов.

Methods:

Register(name string, f CustomGenerator)

Регистрирует кастомный генератор под именем.

Remove(name string)

Удаляет кастомный генератор по имени.

Schema

Псевдоним для *github.com/txix-open/jsonschema.Schema

Generator

Генератор схемы.

Methods:

NewGenerator()

Создать и инициализировать генератор с настройками:

  • FieldNameReflector — функция получения имени и признака обязательного поля,
  • FieldReflector — функция установки свойств поля,
  • ExpandedStruct: true,
  • DoNotReference: true.
Generate(obj any) Schema

Сгенерировать JSON-схему для переданной структуры.

Functions

func GetNameAndRequiredFlag(field reflect.StructField) (string, bool)
  • Возвращает имя поля (с учётом тега json) и флаг обязательности (наличие validate:"required").
  • Игнорирует неэкспортируемые поля.
func SetProperties(field reflect.StructField, s *jsonschema.Schema)
  • Извлекает из тегов поля schema, default, validate, schemaGen.
  • Устанавливает свойства схемы: Title, Description, Default, валидационные ограничения.
  • Если указан кастомный генератор (schemaGen), вызывает его.
Валидация и ограничения
  • Поддерживаются теги validate с опциями: max/lte, min/gte, oneof.
  • Ограничения применяются к типам string, integer, array.
  • Примеры:
    • max=10 ограничение максимальной длины/значения,
    • oneof='val1' 'val2' — перечисление допустимых значений.

Usage

Default usage flow
type MyConfig struct {
    Name string `json:"name" validate:"required,min=3" schema:"Имя,Описание поля"`
    Age  int    `json:"age" validate:"min=18,max=100" default:"18"`
}

gen := schema.NewGenerator()
jsonSchema := gen.Generate(MyConfig{})
// jsonSchema теперь содержит JSON-схему с ограничениями и описаниями

Documentation

Overview

nolint:goconst,mnd

Index

Constants

This section is empty.

Variables

View Source
var CustomGenerators = &customSchema{
	mapSchema: make(map[string]CustomGenerator),
}

nolint:gochecknoglobals

Functions

func GetFieldName

func GetFieldName(fieldType reflect.StructField) (string, bool)

nolint:nestif

func GetNameAndRequiredFlag

func GetNameAndRequiredFlag(field reflect.StructField) (string, bool)

func SetProperties

func SetProperties(field reflect.StructField, s *jsonschema.Schema)

nolint:nestif

Types

type CustomGenerator

type CustomGenerator func(field reflect.StructField, s *jsonschema.Schema)

type Generator

type Generator struct {
	Reflector *jsonschema.Reflector
}

func NewGenerator

func NewGenerator() *Generator

func (*Generator) Generate

func (g *Generator) Generate(obj any) Schema

type Schema

type Schema *jsonschema.Schema

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL