tagly

module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: Nov 6, 2023 License: Apache-2.0

README

tagly

GoLang tag toolbox

GoReportCard GoDoc

This library is compatible with Go 1.17+

Please refer to CHANGELOG.md if you encounter breaking changes.

Motivation

This project provides go struct tag utility to parse complex tags, alongside common tag functionality, which includes a format tag

Usage

Formatting tag
package example

import (
	"reflect"
	"time"
	"log"
	"fmt"
	"github.com/viant/tagly/format"
)

type (
	Bar struct {
		Info string
	}
	Dummy struct {
		ID       string    `format:"Id"`
		At       time.Time `format:"tz=UTC,dateFormat:yyyy-MM-dd hh:mm`
		Internal bool      `format:"-"`
		Bar      `format:",inline"`
		AttrX    string `format:",caseFormat=upperdash"`
		Other    string `format:",inline,dateFormat=yyyy-MM-dd" json:"JsonCustomizedName"`
	}
)

func ExampleOfFormatTag() {
	tagValue := reflect.StructTag(`format:",inline,dateFormat=yyyy-MM-dd" json:"JsonCustomizedName"`)
	tag, err := format.Parse(tagValue, "json")
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", tag)
}    
Parsing tags
package example

import (
	"strings"
	"fmt"
	"github.com/viant/tagly/tags"
)

type Tag struct {
    Name string
	Setting1 string
	Repeated []string
	SettingN bool
	
}

func (t *Tag) updateTagKey(key, value string) error {
    switch strings.ToLower(key) {
        case "name":
			t.Name = value
		case "setting1":
            t.Setting1 = value
        case "settingn":
			t.SettingN = value == "true" || value == ""
		case "repeated":
			t.Repeated = strings.Split(strings.Trim(value, "{}"), ",")
		default:
			return fmt.Errorf("unsupported tag: %s", key)
    }
	return nil
}


func ParseTag(tagString string) *Tag {
	tag := &Tag{}
	values := tags.Values(tagString)
	name, values := values.Name()
	tag.Name = name
	_ = values.MatchPairs(tag.updateTagKey)
	return tag
}

format tag

Case formatter

package example

import (
	"fmt"
	"github.com/viant/tagly/format/text"
)


func ExampleCaseFormatter() {
	
    caseFormat := text.CaseFormatUpperUnderscore
    formatter := caseFormat.To(text.CaseFormatLowerCamel)
    formatted := formatter.Format("THIS_IS_TEST")
    fmt.Printf("formatted: %s\n", formatted)
	
   detected := text.DetectCaseFormat("candidate", "candidate_2")
   fmt.Printf("detected: %s %v\n", detected, detected.IsDefined())
   
}

Common tag:

Contributing to tagly

tagly is an open source project and contributors are welcome!

See TODO list

License

The source code is made available under the terms of the Apache License, Version 2, as stated in the file LICENSE.

Individual files may be made available under their own specific license, all compatible with Apache License, Version 2. Please see individual files for details.

Credits and Acknowledgements

Library Author: Adrian Witas

Directories

Path Synopsis
Package formt defines utilities for formatting Struct field values
Package formt defines utilities for formatting Struct field values

Jump to

Keyboard shortcuts

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