code: def normalize_struct(value):
      
      norm_elements = []
      for member_name, member_value in value._values.items():
          norm_elements.append("%s_%s" % (member_name, normalize(member_value)))
  
      norm_str = "_".join(norm_elements)
      md5 = hashlib.md5(norm_str.encode('utf-8')).hexdigest()
      return md5[:8]
docs: 5.1.1.4 - c.6:
          Structs shall be rendered by:
          1. generating the normalized value of each member,
          2. joining each member’s name with its normalized value, separated by
              a single underscore (_),
          3. joining the member character sequences with single underscores,
          4. using the first eight characters of the md5 checksum of this
              character sequence
  
          ... which can be semi-formalized as:
              member_normalization = concat( member_name, '_', normalized_member_value )
              subsequence( md5( join( apply( struct_members, member_normalization ) ), 0, 8)