X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=binapigen%2Fgen_helpers.go;h=944bfe2b20a422ad905a61a0fefa31f1d6ca5715;hb=d0b973030fe07dc7875da72f5ebe42d8bd9544b1;hp=a22f1c6a56010fbdd155f0836a42fa9b8ac7dd88;hpb=d1f24d37bd447b64e402298bb8eb2479681facf9;p=govpp.git diff --git a/binapigen/gen_helpers.go b/binapigen/gen_helpers.go index a22f1c6..944bfe2 100644 --- a/binapigen/gen_helpers.go +++ b/binapigen/gen_helpers.go @@ -22,10 +22,11 @@ func init() { const ( fmtPkg = GoImportPath("fmt") netPkg = GoImportPath("net") + timePkg = GoImportPath("time") stringsPkg = GoImportPath("strings") ) -func generateIPConversion(g *GenFile, structName string, ipv int) { +func genIPConversion(g *GenFile, structName string, ipv int) { // ParseIPXAddress method g.P("func Parse", structName, "(s string) (", structName, ", error) {") if ipv == 4 { @@ -77,7 +78,7 @@ func generateIPConversion(g *GenFile, structName string, ipv int) { g.P() } -func generateAddressConversion(g *GenFile, structName string) { +func genAddressConversion(g *GenFile, structName string) { // ParseAddress method g.P("func Parse", structName, "(s string) (", structName, ", error) {") g.P(" ip := ", netPkg.Ident("ParseIP"), "(s)") @@ -132,7 +133,7 @@ func generateAddressConversion(g *GenFile, structName string) { g.P() } -func generateIPPrefixConversion(g *GenFile, structName string, ipv int) { +func genIPPrefixConversion(g *GenFile, structName string, ipv int) { // ParsePrefix method g.P("func Parse", structName, "(s string) (prefix ", structName, ", err error) {") g.P(" hasPrefix := ", stringsPkg.Ident("Contains"), "(s, \"/\")") @@ -185,13 +186,6 @@ func generateIPPrefixConversion(g *GenFile, structName string, ipv int) { g.P("func (x ", structName, ") String() string {") g.P(" ip := x.Address.String()") g.P(" return ip + \"/\" + ", strconvPkg.Ident("Itoa"), "(int(x.Len))") - /*if ipv == 4 { - g.P(" mask := ", netPkg.Ident("CIDRMask"), "(int(x.Len), 32)") - } else { - g.P(" mask := ", netPkg.Ident("CIDRMask"), "(int(x.Len), 128)") - } - g.P(" ipnet := &", netPkg.Ident("IPNet"), "{IP: x.Address.ToIP(), Mask: mask}") - g.P(" return ipnet.String()")*/ g.P("}") // MarshalText method @@ -211,7 +205,7 @@ func generateIPPrefixConversion(g *GenFile, structName string, ipv int) { g.P() } -func generatePrefixConversion(g *GenFile, structName string) { +func genPrefixConversion(g *GenFile, structName string) { // ParsePrefix method g.P("func Parse", structName, "(ip string) (prefix ", structName, ", err error) {") g.P(" hasPrefix := ", stringsPkg.Ident("Contains"), "(ip, \"/\")") @@ -276,7 +270,7 @@ func generatePrefixConversion(g *GenFile, structName string) { g.P() } -func generateAddressWithPrefixConversion(g *GenFile, structName string) { +func genAddressWithPrefixConversion(g *GenFile, structName string) { // ParseAddressWithPrefix method g.P("func Parse", structName, "(s string) (", structName, ", error) {") g.P(" prefix, err := ParsePrefix(s)") @@ -308,7 +302,7 @@ func generateAddressWithPrefixConversion(g *GenFile, structName string) { g.P() } -func generateMacAddressConversion(g *GenFile, structName string) { +func genMacAddressConversion(g *GenFile, structName string) { // ParseMAC method g.P("func Parse", structName, "(s string) (", structName, ", error) {") g.P(" var macaddr ", structName) @@ -346,3 +340,42 @@ func generateMacAddressConversion(g *GenFile, structName string) { g.P("}") g.P() } + +func genTimestampConversion(g *GenFile, structName string) { + // NewTimestamp method + g.P("func New", structName, "(t ", timePkg.Ident("Time"), ") ", structName, " {") + g.P(" sec := int64(t.Unix())") + g.P(" nsec := int32(t.Nanosecond())") + g.P(" ns := float64(sec) + float64(nsec / 1e9)") + g.P(" return ", structName, "(ns)") + g.P("}") + + // ToTime method + g.P("func (x ", structName, ") ToTime() ", timePkg.Ident("Time"), " {") + g.P(" ns := int64(x * 1e9)") + g.P(" sec := ns / 1e9") + g.P(" nsec := ns % 1e9") + g.P(" return ", timePkg.Ident("Unix"), "(sec, nsec)") + g.P("}") + + // String method + g.P("func (x ", structName, ") String() string {") + g.P(" return x.ToTime().String()") + g.P("}") + + // MarshalText method + g.P("func (x *", structName, ") MarshalText() ([]byte, error) {") + g.P(" return []byte(x.ToTime().Format(", timePkg.Ident("RFC3339Nano"), ")), nil") + g.P("}") + + // UnmarshalText method + g.P("func (x *", structName, ") UnmarshalText(text []byte) error {") + g.P(" t, err := ", timePkg.Ident("Parse"), "(", timePkg.Ident("RFC3339Nano"), ", string(text))") + g.P(" if err != nil {") + g.P(" return err") + g.P(" }") + g.P(" *x = New", structName, "(t)") + g.P(" return nil") + g.P("}") + g.P() +}