blob: d7b831a7487247966e0751fed6856fac027086d4 [file] [log] [blame]
package builder_test
import (
"fmt"
"github.com/lann/builder"
)
// Simple math expression allowing multiple adds/subtracts and a single
// (optional) multiply.
type simpleExpr struct {
Multiplier int
Adds []int
Subtracts []int
}
func (e simpleExpr) Equals() (total int) {
for _, i := range e.Adds { total += i }
for _, i := range e.Subtracts { total -= i }
if e.Multiplier != 0 { total *= e.Multiplier }
return
}
// Start builder definition
type simpleExprBuilder builder.Builder
func (b simpleExprBuilder) Multiplier(i int) simpleExprBuilder {
return builder.Set(b, "Multiplier", i).(simpleExprBuilder)
}
func (b simpleExprBuilder) Add(i int) simpleExprBuilder {
return builder.Append(b, "Adds", i).(simpleExprBuilder)
}
func (b simpleExprBuilder) Subtract(i int) simpleExprBuilder {
return builder.Append(b, "Subtracts", i).(simpleExprBuilder)
}
func (b simpleExprBuilder) Equals() int {
return builder.GetStruct(b).(simpleExpr).Equals()
}
// SimpleExprBuilder is an empty builder
var SimpleExprBuilder =
builder.Register(simpleExprBuilder{}, simpleExpr{}).(simpleExprBuilder)
// End builder definition
func Example_basic() {
b := SimpleExprBuilder.Add(10).Subtract(3)
// Intermediate values can be reused
b2 := b.Multiplier(2)
b3 := b.Multiplier(3)
fmt.Println(b.Equals(), b2.Equals(), b3.Equals())
// Output:
// 7 14 21
}