|  | #!/usr/bin/env python3
 | 
|  | TEMPLATE = """\
 | 
|  |         %spublic %s %s {
 | 
|  |             get {
 | 
|  |                 return %s_;
 | 
|  |             }
 | 
|  |             set {
 | 
|  |                 if (value != %s_) {
 | 
|  |                     %s_ = value;
 | 
|  |                     NotifyPropertyChanged("%s");
 | 
|  |                 }
 | 
|  |             }
 | 
|  |         }
 | 
|  | """
 | 
|  | JSONPROPERTY_TEMPLATE = '[JsonProperty]\n        '
 | 
|  | 
 | 
|  | def write(has_jsonproperty, vtype, name):
 | 
|  |     if has_jsonproperty:
 | 
|  |         jsonproperty = JSONPROPERTY_TEMPLATE
 | 
|  |     else:
 | 
|  |         jsonproperty = ''
 | 
|  |     return TEMPLATE % (jsonproperty, vtype, name, name, name, name, name)
 | 
|  | 
 | 
|  | properties = [
 | 
|  |     '1 string name',
 | 
|  |     '0 int another',
 | 
|  |     # 12 fields omitted for brevity
 | 
|  | ]
 | 
|  | properties_split = [p.split() for p in properties]
 | 
|  | 
 | 
|  | # Private definitions (internal)
 | 
|  | for has_jsonproperty, vtype, name in properties_split:
 | 
|  |     print("        private %s %s_ { get; set; }" % (vtype, name))
 | 
|  | 
 | 
|  | print()
 | 
|  | # Public definitions (with notifications)
 | 
|  | for has_jsonproperty, vtype, name in properties_split:
 | 
|  |     print(write(has_jsonproperty == '1', vtype, name))
 |