{{#if isOptional}}
  if ({{source}}.HasValue()) {
    {{>decodable_value target=target source=(concat source ".Value()") cluster=cluster depth=(incrementDepth depth) isOptional=false}}
  } else {
    {{target}} = nil;
  }
{{else if isNullable}}
  if ({{source}}.IsNull()) {
    {{target}} = nil;
  } else {
    {{>decodable_value target=target source=(concat source ".Value()") cluster=cluster depth=(incrementDepth depth) isNullable=false}}
  }
{{else if isArray}}
  { // Scope for our temporary variables
    auto * array_{{depth}} = [NSMutableArray new];
    for (auto & entry_{{depth}} : {{source}}) {
      {{asObjectiveCClass type cluster forceNotList=true}} * newElement_{{depth}};
      {{>decodable_value target=(concat "newElement_" depth) source=(concat "entry_" depth) cluster=cluster depth=(incrementDepth depth) isArray=false}}
      [array_{{depth}} addObject:newElement_{{depth}}];
    }
    {{target}} = array_{{depth}};
  }
{{else}}
  {{#if_is_struct type}}
    {{target}} = [{{asObjectiveCClass type cluster forceNotList=true}} new];
    {{#zcl_struct_items_by_struct_and_cluster_name type cluster}}
      {{>decodable_value target=(concat ../target "." (asStructPropertyName label)) source=(concat ../source "." (asLowerCamelCase label)) cluster=../cluster depth=(incrementDepth ../depth) }}
    {{/zcl_struct_items_by_struct_and_cluster_name}}
  {{else}}
    {{#if_is_strongly_typed_chip_enum type}}
      {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:chip::to_underlying({{source}})];
    {{else}}
      {{#if_is_strongly_typed_bitmap type}}
        {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:{{source}}.Raw()];
      {{else if (isOctetString type)}}
        {{target}} = [NSData dataWithBytes:{{source}}.data() length:{{source}}.size()];
      {{else if (isCharString type)}}
        {{target}} = [[NSString alloc] initWithBytes:{{source}}.data() length:{{source}}.size() encoding:NSUTF8StringEncoding];
      {{else}}
        {{target}} = [NSNumber numberWith{{asObjectiveCNumberType "" type false}}:{{source}}];
      {{/if_is_strongly_typed_bitmap}}
    {{/if_is_strongly_typed_chip_enum}}
  {{/if_is_struct}}
{{/if}}
