{"id":36481949,"url":"https://github.com/m4gshm/fieldr","last_synced_at":"2026-01-12T01:02:43.957Z","repository":{"id":57628157,"uuid":"404116289","full_name":"m4gshm/fieldr","owner":"m4gshm","description":"Boilerplate code killer. Generates various code, such as getters/setters, builders, or constants.","archived":false,"fork":false,"pushed_at":"2025-10-04T23:52:24.000Z","size":562,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-05T01:17:47.964Z","etag":null,"topics":["boilerplate","builder","code-generation","code-generator","codegen","constants","enum","fields","getter","go","golang","orm","setter","stringify"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m4gshm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-07T20:38:29.000Z","updated_at":"2025-06-16T21:41:59.000Z","dependencies_parsed_at":"2024-02-05T00:24:50.371Z","dependency_job_id":"e719a8f4-e41a-44b4-b28c-3840c0f7b6dd","html_url":"https://github.com/m4gshm/fieldr","commit_stats":null,"previous_names":["m4gshm/tag-constanter"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/m4gshm/fieldr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4gshm%2Ffieldr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4gshm%2Ffieldr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4gshm%2Ffieldr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4gshm%2Ffieldr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m4gshm","download_url":"https://codeload.github.com/m4gshm/fieldr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4gshm%2Ffieldr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28330165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T00:36:25.062Z","status":"ssl_error","status_checked_at":"2026-01-12T00:36:15.229Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","builder","code-generation","code-generator","codegen","constants","enum","fields","getter","go","golang","orm","setter","stringify"],"created_at":"2026-01-12T01:02:38.733Z","updated_at":"2026-01-12T01:02:43.936Z","avatar_url":"https://github.com/m4gshm.png","language":"Go","readme":"# Fieldr\n\nGenerator of various enumerated constants, types, functions based on a\ntype properties like name, structure fields, tags or base type nature.\n\n## Supported commands\n\n- [fields-to-consts](#fields-to-consts-example) - generate constants\n  based on template applied to struct fields.\n\n- [get-set](#get-set-usage-example) - generates getters and setters.\n\n- [new-opt](#functional-options-constructor-example) - generates a\n  function that creates an optionally initialized struct instance.\n\n- [new-full](#full-constructor-example) - generates a function that\n  creates a full initialized struct instance.\n\n- [builder](#builder-usage-example) - generates builder API of a struct\n  type.\n\n- [as-map](#as-map-usage-example) - generates a method or functon that\n  converts a struct to a map.\n\n- [enrich-const-type](#enrich-const-type-usage-example) - extends a\n  constants type by 'get name' method, 'enum all values' function and\n  'get a constant by a value of the underlying type' function.\n\n## Installation\n\n``` console\ngo install github.com/m4gshm/fieldr@latest\n```\n\nor\n\n``` console\ngo install github.com/m4gshm/fieldr@HEAD\n```\n\n## fields-to-consts example\n\nsource `entity.go`:\n\n``` go\npackage enum_const\n\n//go:generate fieldr -type Entity fields-to-consts -val tag.json -list jsons\ntype Entity struct {\n    Id   int    `json:\"id\"`\n    Name string `json:\"name\"`\n}\n```\n\nthen running this command in the same directory:\n\n``` console\ngo generate .\n```\n\nwill be generated `entity_fieldr.go` file with the next content:\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage enum_const\n\nconst (\n    entityJsonId   = \"id\"\n    entityJsonName = \"name\"\n)\n\nfunc jsons() []string {\n    return []string{entityJsonId, entityJsonName}\n}\n```\n\nthis consist of constants based on the `json` tag contents and the\nmethod `jsons` that enumerates these constants.\n\nTo get extended help of the command, use the following:\n\n``` console\nfieldr fields-to-consts help\n```\n\n### Example of generating ORM elements:\n\nsource `entity.go`:\n\n``` go\npackage enum_const_db\n\n//go:generate fieldr -type Entity\n//go:fieldr fields-to-consts -name \"'col' + field.name\" -val \"tag.db\" -flat Versioned -type column -list . -ref-access .\n//go:fieldr fields-to-consts -name \"'pk' + field.name\" -val \"tag.db\" -include \"tag.pk == 'true'\" -type column -list pk\n\ntype Entity struct {\n    BaseEntity\n    Versioned *VersionedEntity\n    Name      string `db:\"name\"`\n}\n\ntype BaseEntity struct {\n    ID int32 `db:\"id\" pk:\"true\"`\n}\n\ntype VersionedEntity struct {\n    Version int64 `db:\"version\"`\n}\n```\n\ngenerated `entity_fieldr.go`:\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage enum_const_db\n\ntype column string\n\nconst (\n    colID      column = \"id\"\n    colVersion column = \"version\"\n    colName    column = \"name\"\n    pkID       column = \"id\"\n)\n\nfunc columns() []column {\n    return []column{colID, colVersion, colName}\n}\n\nfunc (s *Entity) ref(f column) any {\n    if s == nil {\n        return nil\n    }\n    switch f {\n    case colID:\n        return \u0026s.BaseEntity.ID\n    case colVersion:\n        if v := s.Versioned; v != nil {\n            return \u0026v.Version\n        }\n    case colName:\n        return \u0026s.Name\n    }\n    return nil\n}\n\nfunc pk() []column {\n    return []column{pkID}\n}\n```\n\n#### explanation of used args:\n\n- -name *\"'col' + field.name\"* - defines constant names as 'col'\n  appended by the associated field name.\n\n- -val *\"tag.db\"* - defines the value of a constant as a copy of the\n  `db` tag of the associated field name.\n\n- -flat *Versioned* - also uses the `VersionedEntity` fields as\n  constants source type in addition to the base `Entity` type.\n\n- -type *column* - adds the `column` type, and uses it as the type of\n  the generated constants.\n\n- -list *.* - generates the `columns` function that returns constant\n  values. It can be used to build sql queries like INSERT, SELECT.\n\n- -ref-access *.* - generates the `ref` method that provides access to\n  the filed values, returns a reference pointing to the field associated\n  with the constant. The method can be used in conjunction with Row.Scan\n  from sql package.\n\n- -include *\"tag.pk != nil\"* - uses only 'pk' tag having a value.\n\n## get-set usage example\n\nsource `entity.go`\n\n``` go\npackage get_set\n\nimport \"time\"\n\n//go:generate fieldr -type Entity get-set\n\ntype BaseEntity[ID any] struct {\n    id ID\n}\n\ntype Entity[ID any] struct {\n    *BaseEntity[ID]\n    name    string\n    surname string\n    ts      time.Time\n}\n```\n\n``` console\ngo generate .\n```\n\ngenerates `entity_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage get_set\n\nimport \"time\"\n\nfunc (e *Entity[ID]) ID() ID {\n    if e != nil {\n        if be := e.BaseEntity; be != nil {\n            return be.id\n        }\n    }\n\n    var no ID\n    return no\n}\n\nfunc (e *Entity[ID]) SetID(id ID) {\n    if e != nil {\n        if be := e.BaseEntity; be != nil {\n            be.id = id\n        }\n    }\n}\n\nfunc (e *Entity[ID]) Name() string {\n    if e != nil {\n        return e.name\n    }\n\n    var no string\n    return no\n}\n\nfunc (e *Entity[ID]) SetName(name string) {\n    if e != nil {\n        e.name = name\n    }\n}\n\nfunc (e *Entity[ID]) Surname() string {\n    if e != nil {\n        return e.surname\n    }\n\n    var no string\n    return no\n}\n\nfunc (e *Entity[ID]) SetSurname(surname string) {\n    if e != nil {\n        e.surname = surname\n    }\n}\n\nfunc (e *Entity[ID]) Ts() time.Time {\n    if e != nil {\n        return e.ts\n    }\n\n    var no time.Time\n    return no\n}\n\nfunc (e *Entity[ID]) SetTs(ts time.Time) {\n    if e != nil {\n        e.ts = ts\n    }\n}\n```\n\n## 'Functional Options' constructor example\n\nsource `entity.go`\n\n``` go\npackage new_opt\n\n//go:generate fieldr -type Entity new-opt -flat -required ID\ntype Entity[ID any] struct {\n    *Model[ID]\n    Name string\n}\n\ntype Model[ID any] struct {\n    ID        ID\n    CreatedAt int64\n    UpdatedAt int64\n}\n```\n\n``` console\ngo generate .\n```\n\ngenerates `entity_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage new_opt\n\nfunc NewEntity[ID any](\n    id ID,\n    opts ...func(*Entity[ID]),\n) *Entity[ID] {\n    r := \u0026Entity[ID]{\n        Model: \u0026Model[ID]{\n            ID: id,\n        },\n    }\n    for _, opt := range opts {\n        opt(r)\n    }\n    return r\n}\n\nfunc WithCreatedAt[ID any](createdAt int64) func(e *Entity[ID]) {\n    return func(e *Entity[ID]) {\n        m := e.Model\n        if m == nil {\n            m = new(Model[ID])\n            e.Model = m\n        }\n        m.CreatedAt = createdAt\n    }\n}\n\nfunc WithUpdatedAt[ID any](updatedAt int64) func(e *Entity[ID]) {\n    return func(e *Entity[ID]) {\n        m := e.Model\n        if m == nil {\n            m = new(Model[ID])\n            e.Model = m\n        }\n        m.UpdatedAt = updatedAt\n    }\n}\n\nfunc WithName[ID any](name string) func(e *Entity[ID]) {\n    return func(e *Entity[ID]) {\n        e.Name = name\n    }\n}\n```\n\n## Full constructor example\n\nsource `entity.go`\n\n``` go\npackage new_full\n\n//go:generate fieldr -type Entity new-full\ntype Entity[ID any] struct {\n    *Model[ID]\n    Name string\n}\n\ntype Model[ID any] struct {\n    ID        ID\n    CreatedAt int64\n    UpdatedAt int64\n}\n```\n\n``` console\ngo generate .\n```\n\ngenerates `entity_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage new_full\n\nfunc NewEntity[ID any](\n    model *Model[ID],\n    name string,\n) *Entity[ID] {\n    return \u0026Entity[ID]{\n        Model: model,\n        Name:  name,\n    }\n}\n```\n\n## builder usage example\n\nsource `entity.go`\n\n``` go\npackage builder\n\n//go:generate fieldr -type Entity builder -deconstructor .\ntype Entity[ID any] struct {\n    *Model[ID]\n    Name string\n}\n\ntype Model[ID any] struct {\n    ID        ID\n    CreatedAt int64\n    UpdatedAt int64\n}\n```\n\n``` console\ngo generate .\n```\n\ngenerates `entity_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage builder\n\ntype EntityBuilder[ID any] struct {\n    id        ID\n    createdAt int64\n    updatedAt int64\n    name      string\n}\n\nfunc NewEntityBuilder[ID any]() *EntityBuilder[ID] {\n    return \u0026EntityBuilder[ID]{}\n}\n\nfunc (b *EntityBuilder[ID]) Build() *Entity[ID] {\n    if b == nil {\n        return \u0026Entity[ID]{}\n    }\n    return \u0026Entity[ID]{\n        Model: \u0026Model[ID]{\n            ID:        b.id,\n            CreatedAt: b.createdAt,\n            UpdatedAt: b.updatedAt,\n        },\n        Name: b.name,\n    }\n}\n\nfunc (b *EntityBuilder[ID]) ID(id ID) *EntityBuilder[ID] {\n    if b != nil {\n        b.id = id\n    }\n    return b\n}\n\nfunc (b *EntityBuilder[ID]) CreatedAt(createdAt int64) *EntityBuilder[ID] {\n    if b != nil {\n        b.createdAt = createdAt\n    }\n    return b\n}\n\nfunc (b *EntityBuilder[ID]) UpdatedAt(updatedAt int64) *EntityBuilder[ID] {\n    if b != nil {\n        b.updatedAt = updatedAt\n    }\n    return b\n}\n\nfunc (b *EntityBuilder[ID]) Name(name string) *EntityBuilder[ID] {\n    if b != nil {\n        b.name = name\n    }\n    return b\n}\n\nfunc (e *Entity[ID]) ToBuilder() *EntityBuilder[ID] {\n    if e == nil {\n        return \u0026EntityBuilder[ID]{}\n    }\n    var (\n        e_Model_ID        ID\n        e_Model_CreatedAt int64\n        e_Model_UpdatedAt int64\n    )\n    if m := e.Model; m != nil {\n        e_Model_ID = m.ID\n        e_Model_CreatedAt = m.CreatedAt\n        e_Model_UpdatedAt = m.UpdatedAt\n    }\n\n    return \u0026EntityBuilder[ID]{\n        id:        e_Model_ID,\n        createdAt: e_Model_CreatedAt,\n        updatedAt: e_Model_UpdatedAt,\n        name:      e.Name,\n    }\n}\n```\n\n## as-map usage example\n\nsource `struct.go`\n\n``` go\npackage asmap\n\nimport \"time\"\n\n//go:generate fieldr -type EmbeddedAddress -out address_as_map.go as-map -key-type . -export\n//go:generate fieldr -type Struct -out struct_as_map.go as-map -key-type . -export -rewrite type:*EmbeddedAddress:fmt=%v.AsMap() -flat Flat\n\ntype BaseStruct struct {\n    ID int\n    TS *time.Time\n}\n\ntype EmbeddedAddress struct {\n    ZipCode     int\n    AddressLine string\n}\n\ntype FlatPart struct {\n    CardNum string\n    Bank    string\n}\n\ntype Struct[n string] struct {\n    *BaseStruct\n    Name     n\n    Surname  string\n    noExport string //nolint\n    NoTag    string\n    Address  *EmbeddedAddress\n    Flat     FlatPart\n}\n```\n\n``` console\ngo generate .\n```\n\ngenerates two files `struct_as_map.go`, `address_as_map.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage asmap\n\ntype StructField string\n\nconst (\n    BaseStructID StructField = \"ID\"\n    BaseStructTS StructField = \"TS\"\n    Name         StructField = \"Name\"\n    Surname      StructField = \"Surname\"\n    NoTag        StructField = \"NoTag\"\n    Address      StructField = \"Address\"\n    FlatCardNum  StructField = \"CardNum\"\n    FlatBank     StructField = \"Bank\"\n)\n\nfunc (s *Struct[n]) AsMap() map[StructField]any {\n    if s == nil {\n        return nil\n    }\n    m := map[StructField]any{}\n    if bs := s.BaseStruct; bs != nil {\n        m[BaseStructID] = bs.ID\n    }\n    if bs := s.BaseStruct; bs != nil {\n        if ts := bs.TS; ts != nil {\n            m[BaseStructTS] = ts\n        }\n    }\n    m[Name] = s.Name\n    m[Surname] = s.Surname\n    m[NoTag] = s.NoTag\n    if a := s.Address; a != nil {\n        m[Address] = a.AsMap()\n    }\n    m[FlatCardNum] = s.Flat.CardNum\n    m[FlatBank] = s.Flat.Bank\n    return m\n}\n```\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage asmap\n\ntype EmbeddedAddressField string\n\nconst (\n    ZipCode     EmbeddedAddressField = \"ZipCode\"\n    AddressLine EmbeddedAddressField = \"AddressLine\"\n)\n\nfunc (e *EmbeddedAddress) AsMap() map[EmbeddedAddressField]any {\n    if e == nil {\n        return nil\n    }\n    m := map[EmbeddedAddressField]any{}\n    m[ZipCode] = e.ZipCode\n    m[AddressLine] = e.AddressLine\n    return m\n}\n```\n\n## enrich-const-type usage example\n\nsource `enum.go`\n\n``` go\npackage enrich_enum\n\n//go:generate fieldr -type Enum enrich-const-type -export\n\ntype Enum int\n\nconst (\n    AA Enum = iota + 1\n    BB\n    CC\n    DD\n)\n\n//go:generate fieldr -type StringEnum enrich-const-type -export\n\ntype BaseStringEnum string\ntype StringEnum BaseStringEnum\n\nconst (\n    FIRST  StringEnum = \"first one\"\n    SECOND StringEnum = \"one more\"\n    THIRD  StringEnum = \"any third\"\n)\n```\n\n``` console\ngo generate .\n```\n\ngenerates `enum_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage enrich_enum\n\nfunc (e Enum) Name() string {\n    switch e {\n    case AA:\n        return \"AA\"\n    case BB:\n        return \"BB\"\n    case CC:\n        return \"CC\"\n    case DD:\n        return \"DD\"\n    default:\n        return \"\"\n    }\n}\n\nfunc EnumAll() []Enum {\n    return []Enum{\n        AA,\n        BB,\n        CC,\n        DD,\n    }\n}\n\nfunc EnumByName(name string) (e Enum, ok bool) {\n    ok = true\n    switch name {\n    case \"AA\":\n        e = AA\n    case \"BB\":\n        e = BB\n    case \"CC\":\n        e = CC\n    case \"DD\":\n        e = DD\n    default:\n        ok = false\n    }\n    return\n}\n\nfunc EnumByValue(value int) (e Enum, ok bool) {\n    ok = true\n    switch value {\n    case 1:\n        e = AA\n    case 2:\n        e = BB\n    case 3:\n        e = CC\n    case 4:\n        e = DD\n    default:\n        ok = false\n    }\n    return\n}\n```\n\nand `enum_string_enum_fieldr.go`\n\n``` go\n// Code generated by 'fieldr'; DO NOT EDIT.\n\npackage enrich_enum\n\nfunc (s StringEnum) Name() string {\n    switch s {\n    case FIRST:\n        return \"FIRST\"\n    case SECOND:\n        return \"SECOND\"\n    case THIRD:\n        return \"THIRD\"\n    default:\n        return \"\"\n    }\n}\n\nfunc StringEnumAll() []StringEnum {\n    return []StringEnum{\n        FIRST,\n        SECOND,\n        THIRD,\n    }\n}\n\nfunc StringEnumByName(name string) (e StringEnum, ok bool) {\n    ok = true\n    switch name {\n    case \"FIRST\":\n        e = FIRST\n    case \"SECOND\":\n        e = SECOND\n    case \"THIRD\":\n        e = THIRD\n    default:\n        ok = false\n    }\n    return\n}\n\nfunc StringEnumByValue(value string) (e StringEnum, ok bool) {\n    ok = true\n    switch value {\n    case \"first one\":\n        e = FIRST\n    case \"one more\":\n        e = SECOND\n    case \"any third\":\n        e = THIRD\n    default:\n        ok = false\n    }\n    return\n}\n```\n\nSee more examples [here](./internal/examples/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4gshm%2Ffieldr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm4gshm%2Ffieldr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4gshm%2Ffieldr/lists"}