github.com/egonelbre/exp@v0.0.0-20240430123955-ed1d3aa93911/fields/00_typeswitch/field.go (about)

     1  package main
     2  
     3  //gistsnip:start:interface
     4  type Field interface {
     5  	Name() string
     6  }
     7  
     8  type Uint struct {
     9  	ID    string
    10  	Value uint64
    11  }
    12  
    13  func (a *Uint) Name() string      { return a.ID }
    14  func (a *Uint) Add(b *Uint) *Uint { return &Uint{Value: a.Value + b.Value} }
    15  func (a *Uint) Sub(b *Uint) *Uint { return &Uint{Value: a.Value - b.Value} }
    16  
    17  type Float struct {
    18  	ID    string
    19  	Value float64
    20  }
    21  
    22  func (a *Float) Name() string        { return a.ID }
    23  func (a *Float) Add(b *Float) *Float { return &Float{Value: a.Value + b.Value} }
    24  func (a *Float) Sub(b *Float) *Float { return &Float{Value: a.Value - b.Value} }
    25  
    26  //gistsnip:end:interface
    27  
    28  type Error struct{ Desc string }
    29  
    30  func (a *Error) Name() string  { return "Error" }
    31  func (a *Error) Error() string { return a.Desc }