github.com/sandwich-go/boost@v1.3.29/misc/annotation/annotation.go (about)

     1  package annotation
     2  
     3  import "errors"
     4  
     5  var ErrNoAnnotation = errors.New("no annotation")
     6  
     7  // Annotation 注释
     8  type Annotation interface {
     9  	// Name 注释名
    10  	// 如,'// annotation@X( a = "A" )' 的注释名为 'X'
    11  	Name() string
    12  
    13  	// Line 注释文本内容
    14  	Line() string
    15  
    16  	// Contains 是否包含指定 key
    17  	// 如,'// annotation@X( a = "A" )' 的包含 'a'
    18  	Contains(key string) bool
    19  
    20  	// String 指定 key 对应的字符串类型 value
    21  	// 如,'// annotation@X( a = "A" )' 中 key 为 'a' 的 value 为 'A'
    22  	String(key string, defaultVal ...string) string
    23  
    24  	// Int8 指定 key 对应的 int8 类型 value
    25  	Int8(key string, defaultVal ...int8) (int8, error)
    26  
    27  	// Int16 指定 key 对应的 int16 类型 value
    28  	Int16(key string, defaultVal ...int16) (int16, error)
    29  
    30  	// Int32 指定 key 对应的 int32 类型 value
    31  	Int32(key string, defaultVal ...int32) (int32, error)
    32  
    33  	// Int64 指定 key 对应的 int64 类型 value
    34  	Int64(key string, defaultVal ...int64) (int64, error)
    35  
    36  	// Uint8 指定 key 对应的 uint8 类型 value
    37  	Uint8(key string, defaultVal ...uint8) (uint8, error)
    38  
    39  	// Uint16 指定 key 对应的 uint16 类型 value
    40  	Uint16(key string, defaultVal ...uint16) (uint16, error)
    41  
    42  	// Uint32 指定 key 对应的 uint32 类型 value
    43  	Uint32(key string, defaultVal ...uint32) (uint32, error)
    44  
    45  	// Uint64 指定 key 对应的 uint64 类型 value
    46  	Uint64(key string, defaultVal ...uint64) (uint64, error)
    47  
    48  	// Int 指定 key 对应的 int 类型 value
    49  	Int(key string, defaultVal ...int) (int, error)
    50  
    51  	// Float32 指定 key 对应的 float32 类型 value
    52  	Float32(key string, defaultVal ...float32) (float32, error)
    53  
    54  	// Float64 指定 key 对应的 float64 类型 value
    55  	Float64(key string, defaultVal ...float64) (float64, error)
    56  
    57  	// Bool 指定 key 对应的 bool 类型 value
    58  	Bool(key string, defaultVal ...bool) (bool, error)
    59  }
    60  
    61  // Descriptor 描述,可以规定萃取的注释名,以及判断萃取的注释是否合法
    62  type Descriptor struct {
    63  	Name      string
    64  	Validator func(Annotation) bool
    65  }
    66  
    67  // Resolver 解析器
    68  type Resolver interface {
    69  	// Resolve 解析一行注释
    70  	// 若未解析成功,则返回 ErrNoAnnotation 错误
    71  	Resolve(line string) (Annotation, error)
    72  
    73  	// ResolveWithName 解析多行注释,但要求 Annotation.Name 是指定的 name 参数
    74  	// 否则返回 ErrNoAnnotation 错误
    75  	ResolveWithName(name string, lines ...string) (Annotation, error)
    76  
    77  	// ResolveMany 解析多行注释
    78  	// 该接口会忽略 ErrNoAnnotation 错误
    79  	ResolveMany(lines ...string) ([]Annotation, error)
    80  
    81  	// ResolveNoDuplicate 解析多行注释,但不允许有重复的 Annotation.Name
    82  	// 否则返回错误
    83  	// 该接口会忽略 ErrNoAnnotation 错误
    84  	ResolveNoDuplicate(lines ...string) ([]Annotation, error)
    85  }
    86  
    87  // Default 默认的解析器,只有包含 'annotation@' 的行,才能萃取到注释
    88  var Default = New()
    89  
    90  // Resolve 使用默认的解析器 Default 解析一行注释
    91  // 若未解析成功,则返回 ErrNoAnnotation 错误
    92  func Resolve(line string) (Annotation, error) { return Default.Resolve(line) }
    93  
    94  // ResolveMany 使用默认的解析器 Default 解析多行注释
    95  // 该接口会忽略 ErrNoAnnotation 错误
    96  func ResolveMany(lines ...string) ([]Annotation, error) { return Default.ResolveMany(lines...) }
    97  
    98  // ResolveWithName 使用默认的解析器 Default 解析多行注释,但要求 Annotation.Name 是指定的 name 参数
    99  // 否则返回 ErrNoAnnotation 错误
   100  func ResolveWithName(name string, lines ...string) (Annotation, error) {
   101  	return Default.ResolveWithName(name, lines...)
   102  }
   103  
   104  // ResolveNoDuplicate 使用默认的解析器 Default 解析多行注释,但不允许有重复的 Annotation.Name
   105  // 否则返回错误
   106  // 该接口会忽略 ErrNoAnnotation 错误
   107  func ResolveNoDuplicate(lines ...string) ([]Annotation, error) {
   108  	return Default.ResolveNoDuplicate(lines...)
   109  }