// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/deserialization/DeserializationContext.java
// public final class DeserializationContext {
// 
//     private final Map<Class<?>, StructDeserializer<?>> structDeserializers = new HashMap<>();
//     private final Map<Class<?>, ArrayDeserializer<?>> arrayDeserializers = new HashMap<>();
// 
//     public boolean hasStructDeserializer(Class<?> type) {
//         return structDeserializers.containsKey(type);
//     }
// 
//     public <T> void addStructDeserializer(Class<T> clazz, StructDeserializer<T> structDeserializer) {
//         structDeserializers.put(clazz, structDeserializer);
//     }
// 
//     @SuppressWarnings("unchecked") // Type parity between map key and deserializer is enforced during addition
//     public <T> StructDeserializer<T> structDeserializer(Class<T> type) {
//         return (StructDeserializer<T>) structDeserializers.get(type);
//     }
// 
//     public boolean hasArrayDeserializer(Class<?> type) {
//         return arrayDeserializers.containsKey(type);
//     }
// 
//     public <T> void addArrayDeserializer(Class<T> clazz, ArrayDeserializer<T> arrayDeserializer) {
//         arrayDeserializers.put(clazz, arrayDeserializer);
//     }
// 
//     @SuppressWarnings("unchecked") // Type parity between map key and deserializer is enforced during addition
//     public <T> ArrayDeserializer<T> arrayDeserializer(Class<T> type) {
//         return (ArrayDeserializer<T>) arrayDeserializers.get(type);
//     }
// 
// }
// 
// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/deserialization/StructMembers.java
// public final class StructMembers {
// 
//     private final DeserializationContext context;
//     private final List<Member> rawMembers;
// 
//     public StructMembers(DeserializationContext context, List<Member> rawMembers) {
//         this.context = context;
//         this.rawMembers = rawMembers;
//     }
// 
//     private StructMember get(String name) {
//         for (Member rawMember : rawMembers) {
//             if (rawMember.name.equals(name)) {
//                 return new StructMember(context, rawMember);
//             }
//         }
//         return null;
//     }
// 
//     public Boolean asBoolean(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asBoolean();
//     }
// 
//     public Integer asInteger(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asInteger();
//     }
// 
//     public Long asLong(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asLong();
//     }
// 
//     public Double asDouble(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asDouble();
//     }
// 
//     public String asString(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asString();
//     }
// 
//     public Date asDate(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asDate();
//     }
// 
//     public <T> T asObject(String name, Class<T> type) {
//         StructMember member = get(name);
//         return member == null? null: member.asObject(type);
//     }
// 
//     public <T> List<T> asList(String name, Class<T> type) {
//         StructMember member = get(name);
//         return member == null? null: member.asList(type);
//     }
// 
// }
// 
// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/types/StructValue.java
// public static final String CODE = "struct";


import nl.nl2312.xmlrpc.deserialization.DeserializationContext;
import nl.nl2312.xmlrpc.deserialization.MemberName;
import nl.nl2312.xmlrpc.deserialization.StructMembers;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.stream.OutputNode;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static nl.nl2312.xmlrpc.types.StructValue.CODE;
package nl.nl2312.xmlrpc.types;




@Root(name = CODE)
public final class StructValue implements Value {

    public static final String CODE = "struct";

    public StructValue(List<Member> members) {
        this.members = members;
    }

    @ElementList(inline = true)
    public List<Member> members;

    @Override
    public List<Member> value() {
        return members;
    }

    @Override
    public void write(OutputNode node) throws Exception {
        OutputNode struct = node.getChild(CODE);
        for (Member member : members) {
            member.write(struct);
        }
    }

    @Override
// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/deserialization/DeserializationContext.java
// public final class DeserializationContext {
// 
//     private final Map<Class<?>, StructDeserializer<?>> structDeserializers = new HashMap<>();
//     private final Map<Class<?>, ArrayDeserializer<?>> arrayDeserializers = new HashMap<>();
// 
//     public boolean hasStructDeserializer(Class<?> type) {
//         return structDeserializers.containsKey(type);
//     }
// 
//     public <T> void addStructDeserializer(Class<T> clazz, StructDeserializer<T> structDeserializer) {
//         structDeserializers.put(clazz, structDeserializer);
//     }
// 
//     @SuppressWarnings("unchecked") // Type parity between map key and deserializer is enforced during addition
//     public <T> StructDeserializer<T> structDeserializer(Class<T> type) {
//         return (StructDeserializer<T>) structDeserializers.get(type);
//     }
// 
//     public boolean hasArrayDeserializer(Class<?> type) {
//         return arrayDeserializers.containsKey(type);
//     }
// 
//     public <T> void addArrayDeserializer(Class<T> clazz, ArrayDeserializer<T> arrayDeserializer) {
//         arrayDeserializers.put(clazz, arrayDeserializer);
//     }
// 
//     @SuppressWarnings("unchecked") // Type parity between map key and deserializer is enforced during addition
//     public <T> ArrayDeserializer<T> arrayDeserializer(Class<T> type) {
//         return (ArrayDeserializer<T>) arrayDeserializers.get(type);
//     }
// 
// }
// 
// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/deserialization/StructMembers.java
// public final class StructMembers {
// 
//     private final DeserializationContext context;
//     private final List<Member> rawMembers;
// 
//     public StructMembers(DeserializationContext context, List<Member> rawMembers) {
//         this.context = context;
//         this.rawMembers = rawMembers;
//     }
// 
//     private StructMember get(String name) {
//         for (Member rawMember : rawMembers) {
//             if (rawMember.name.equals(name)) {
//                 return new StructMember(context, rawMember);
//             }
//         }
//         return null;
//     }
// 
//     public Boolean asBoolean(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asBoolean();
//     }
// 
//     public Integer asInteger(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asInteger();
//     }
// 
//     public Long asLong(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asLong();
//     }
// 
//     public Double asDouble(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asDouble();
//     }
// 
//     public String asString(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asString();
//     }
// 
//     public Date asDate(String name) {
//         StructMember member = get(name);
//         return member == null? null: member.asDate();
//     }
// 
//     public <T> T asObject(String name, Class<T> type) {
//         StructMember member = get(name);
//         return member == null? null: member.asObject(type);
//     }
// 
//     public <T> List<T> asList(String name, Class<T> type) {
//         StructMember member = get(name);
//         return member == null? null: member.asList(type);
//     }
// 
// }
// 
// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/types/StructValue.java
// public static final String CODE = "struct";


// Path: xmlrpc/src/main/java/nl/nl2312/xmlrpc/types/StructValue.java
import nl.nl2312.xmlrpc.deserialization.DeserializationContext;
import nl.nl2312.xmlrpc.deserialization.MemberName;
import nl.nl2312.xmlrpc.deserialization.StructMembers;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.stream.OutputNode;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static nl.nl2312.xmlrpc.types.StructValue.CODE;

package nl.nl2312.xmlrpc.types;




@Root(name = CODE)
public final class StructValue implements Value {

    public static final String CODE = "struct";

    public StructValue(List<Member> members) {
        this.members = members;
    }

    @ElementList(inline = true)
    public List<Member> members;

    @Override
    public List<Member> value() {
        return members;
    }

    @Override
    public void write(OutputNode node) throws Exception {
        OutputNode struct = node.getChild(CODE);
        for (Member member : members) {
            member.write(struct);
        }
    }

    @Override
    public Object asObject(DeserializationContext context, Class<?> type, Class<?> param) throws