summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/pyang_plugins/bgpyang2golang.py101
1 files changed, 51 insertions, 50 deletions
diff --git a/tools/pyang_plugins/bgpyang2golang.py b/tools/pyang_plugins/bgpyang2golang.py
index ff5900c0..9f131df0 100644
--- a/tools/pyang_plugins/bgpyang2golang.py
+++ b/tools/pyang_plugins/bgpyang2golang.py
@@ -280,59 +280,60 @@ def emit_class_def(ctx, yang_statement, struct_name, prefix):
print >> o, '}'
- print >> o, 'func (lhs *{0}) Equal(rhs *{0}) bool {{'.format(convert_to_golang(struct_name))
- print >> o, 'if lhs == nil || rhs == nil {'
- print >> o, 'return false'
- print >> o, '}'
+ if not struct_name.endswith('state'):
+ print >> o, 'func (lhs *{0}) Equal(rhs *{0}) bool {{'.format(convert_to_golang(struct_name))
+ print >> o, 'if lhs == nil || rhs == nil {'
+ print >> o, 'return false'
+ print >> o, '}'
- for val_name, type_name, typ, elem in equal_elems:
- if val_name == 'State':
- continue
- if typ == EQUAL_TYPE_LEAF:
- if type_name == '[]byte':
- print >> o, 'if bytes.Compare(lhs.{0}, rhs.{0}) != 0 {{'.format(val_name)
- else:
- print >> o, 'if lhs.{0} != rhs.{0} {{'.format(val_name)
- print >> o, 'return false'
- print >> o, '}'
- elif typ == EQUAL_TYPE_CONTAINER:
- print >> o, 'if !lhs.{0}.Equal(&(rhs.{0})) {{'.format(val_name)
- print >> o, 'return false'
- print >> o, '}'
- elif typ == EQUAL_TYPE_ARRAY:
- print >> o, 'if len(lhs.{0}) != len(rhs.{0}) {{'.format(val_name)
- print >> o, 'return false'
- print >> o, '}'
- print >> o, 'for idx, l := range lhs.{0} {{'.format(val_name)
- if type_name == '[][]byte':
- print >> o, 'if bytes.Compare(l, rhs.{0}[idx]) != 0 {{'.format(val_name)
+ for val_name, type_name, typ, elem in equal_elems:
+ if val_name == 'State':
+ continue
+ if typ == EQUAL_TYPE_LEAF:
+ if type_name == '[]byte':
+ print >> o, 'if bytes.Compare(lhs.{0}, rhs.{0}) != 0 {{'.format(val_name)
+ else:
+ print >> o, 'if lhs.{0} != rhs.{0} {{'.format(val_name)
+ print >> o, 'return false'
+ print >> o, '}'
+ elif typ == EQUAL_TYPE_CONTAINER:
+ print >> o, 'if !lhs.{0}.Equal(&(rhs.{0})) {{'.format(val_name)
+ print >> o, 'return false'
+ print >> o, '}'
+ elif typ == EQUAL_TYPE_ARRAY:
+ print >> o, 'if len(lhs.{0}) != len(rhs.{0}) {{'.format(val_name)
+ print >> o, 'return false'
+ print >> o, '}'
+ print >> o, 'for idx, l := range lhs.{0} {{'.format(val_name)
+ if type_name == '[][]byte':
+ print >> o, 'if bytes.Compare(l, rhs.{0}[idx]) != 0 {{'.format(val_name)
+ else:
+ print >> o, 'if l != rhs.{0}[idx] {{'.format(val_name)
+ print >> o, 'return false'
+ print >> o, '}'
+ print >> o, '}'
+ elif typ == EQUAL_TYPE_MAP:
+ print >> o, 'if len(lhs.{0}) != len(rhs.{0}) {{'.format(val_name)
+ print >> o, 'return false'
+ print >> o, '}'
+ print >> o, '{'
+ print >> o, 'lmap := make(map[string]*{0})'.format(type_name[2:])
+ print >> o, 'for i, l := range lhs.{0} {{'.format(val_name)
+ print >> o, 'lmap[mapkey(i, string({0}))] = &lhs.{1}[i]'.format(' + '.join('l.{0}'.format(convert_to_golang(v)) for v in elem.split(' ')), val_name)
+ print >> o, '}'
+ print >> o, 'for i, r := range rhs.{0} {{'.format(val_name)
+ print >> o, 'if l, y := lmap[mapkey(i, string({0}))]; !y {{'.format('+'.join('r.{0}'.format(convert_to_golang(v)) for v in elem.split(' ')))
+ print >> o, 'return false'
+ print >> o, '} else if !r.Equal(l) {'
+ print >> o, 'return false'
+ print >> o, '}'
+ print >> o, '}'
+ print >> o, '}'
else:
- print >> o, 'if l != rhs.{0}[idx] {{'.format(val_name)
- print >> o, 'return false'
- print >> o, '}'
- print >> o, '}'
- elif typ == EQUAL_TYPE_MAP:
- print >> o, 'if len(lhs.{0}) != len(rhs.{0}) {{'.format(val_name)
- print >> o, 'return false'
- print >> o, '}'
- print >> o, '{'
- print >> o, 'lmap := make(map[string]*{0})'.format(type_name[2:])
- print >> o, 'for i, l := range lhs.{0} {{'.format(val_name)
- print >> o, 'lmap[mapkey(i, string({0}))] = &lhs.{1}[i]'.format(' + '.join('l.{0}'.format(convert_to_golang(v)) for v in elem.split(' ')), val_name)
- print >> o, '}'
- print >> o, 'for i, r := range rhs.{0} {{'.format(val_name)
- print >> o, 'if l, y := lmap[mapkey(i, string({0}))]; !y {{'.format('+'.join('r.{0}'.format(convert_to_golang(v)) for v in elem.split(' ')))
- print >> o, 'return false'
- print >> o, '} else if !r.Equal(l) {'
- print >> o, 'return false'
- print >> o, '}'
- print >> o, '}'
- print >> o, '}'
- else:
- sys.stderr.write("invalid equal type %s", typ)
+ sys.stderr.write("invalid equal type %s", typ)
- print >> o, 'return true'
- print >> o, '}'
+ print >> o, 'return true'
+ print >> o, '}'
print o.getvalue()