Skip to content

Instantly share code, notes, and snippets.

@talbright
Created May 30, 2014 19:54
Show Gist options
  • Save talbright/78cb17eef2679dfb39a7 to your computer and use it in GitHub Desktop.
Save talbright/78cb17eef2679dfb39a7 to your computer and use it in GitHub Desktop.
package desk
import (
"github.com/lann/builder"
)
type StructA struct {
Name *string
}
type StructB struct {
Subject *string
}
type StructC struct {
Subject *string
Body *string
}
type baseBuilder builder.Builder
type derivedBuilder baseBuilder
func (b derivedBuilder) SetBody(value string) derivedBuilder {
return builder.Set(b, "Body", &value).(derivedBuilder)
}
func (b derivedBuilder) BuildStructC() StructC {
return builder.GetStructLike(b, StructC{}).(StructC)
}
func (b baseBuilder) SetString(field string,value string) baseBuilder {
return builder.Set(b, field, &value).(baseBuilder)
}
func (b baseBuilder) BuildStructA() StructA {
return builder.GetStructLike(b, StructA{}).(StructA)
}
func (b baseBuilder) BuildStructB() StructB {
return builder.GetStructLike(b, StructB{}).(StructB)
}
var StructABuilder = builder.Register(baseBuilder{}, StructA{}).(baseBuilder)
var StructBBuilder = builder.Register(baseBuilder{}, StructB{}).(baseBuilder)
var StructCBuilder = builder.Register(derivedBuilder{}, StructC{}).(derivedBuilder)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment