-
- public static class BooleanCodecStringImpl extends TypeDefinitionAwareCodec<Boolean, BooleanTypeDefinition>
- implements BooleanCodec<String> {
-
- protected BooleanCodecStringImpl(final Optional<BooleanTypeDefinition> typeDef) {
- super(typeDef, Boolean.class);
- }
-
- @Override
- public String serialize(final Boolean data) {
- return data == null ? "" : data.toString();
- }
-
- @Override
- public Boolean deserialize(final String stringRepresentation) {
- return Boolean.valueOf(stringRepresentation);
- }
- };
-
- public static class Uint8CodecStringImpl extends TypeDefinitionAwareCodec<Short, UnsignedIntegerTypeDefinition>
- implements Uint8Codec<String> {
-
- protected Uint8CodecStringImpl(final Optional<UnsignedIntegerTypeDefinition> typeDef) {
- super(typeDef, Short.class);
- }
-
- @Override
- public String serialize(final Short data) {
- return data == null ? "" : data.toString();
- }
-
- @Override
- public Short deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Short.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Short.valueOf(stringRepresentation, base);
- }
- };
-
- public static class Uint16CodecStringImpl extends TypeDefinitionAwareCodec<Integer, UnsignedIntegerTypeDefinition>
- implements Uint16Codec<String> {
- protected Uint16CodecStringImpl(final Optional<UnsignedIntegerTypeDefinition> typeDef) {
- super(typeDef, Integer.class);
- }
-
- @Override
- public Integer deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Integer.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Integer.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Integer data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Uint32CodecStringImpl extends TypeDefinitionAwareCodec<Long, UnsignedIntegerTypeDefinition>
- implements Uint32Codec<String> {
-
- protected Uint32CodecStringImpl(final Optional<UnsignedIntegerTypeDefinition> typeDef) {
- super(typeDef, Long.class);
- }
-
- @Override
- public Long deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Long.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Long.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Long data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Uint64CodecStringImpl extends
- TypeDefinitionAwareCodec<BigInteger, UnsignedIntegerTypeDefinition> implements Uint64Codec<String> {
-
- protected Uint64CodecStringImpl(final Optional<UnsignedIntegerTypeDefinition> typeDef) {
- super(typeDef, BigInteger.class);
- }
-
- @Override
- public BigInteger deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return new BigInteger(normalizeHexadecimal(stringRepresentation), base);
- }
- return new BigInteger(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final BigInteger data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class StringCodecStringImpl extends TypeDefinitionAwareCodec<String, StringTypeDefinition> implements
- StringCodec<String> {
-
- protected StringCodecStringImpl(final Optional<StringTypeDefinition> typeDef) {
- super(typeDef, String.class);
- }
-
- @Override
- public String deserialize(final String stringRepresentation) {
- return stringRepresentation == null ? "" :stringRepresentation;
- }
-
- @Override
- public String serialize(final String data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Int16CodecStringImpl extends TypeDefinitionAwareCodec<Short, IntegerTypeDefinition> implements
- Int16Codec<String> {
-
- protected Int16CodecStringImpl(final Optional<IntegerTypeDefinition> typeDef) {
- super(typeDef, Short.class);
- }
-
- @Override
- public Short deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Short.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Short.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Short data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Int32CodecStringImpl extends TypeDefinitionAwareCodec<Integer, IntegerTypeDefinition> implements
- Int32Codec<String> {
-
- protected Int32CodecStringImpl(final Optional<IntegerTypeDefinition> typeDef) {
- super(typeDef, Integer.class);
- }
-
- @Override
- public Integer deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Integer.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Integer.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Integer data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Int64CodecStringImpl extends TypeDefinitionAwareCodec<Long, IntegerTypeDefinition> implements
- Int64Codec<String> {
-
- protected Int64CodecStringImpl(final Optional<IntegerTypeDefinition> typeDef) {
- super(typeDef, Long.class);
- }
-
- @Override
- public Long deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Long.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Long.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Long data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class Int8CodecStringImpl extends TypeDefinitionAwareCodec<Byte, IntegerTypeDefinition> implements
- Int8Codec<String> {
-
- protected Int8CodecStringImpl(final Optional<IntegerTypeDefinition> typeDef) {
- super(typeDef, Byte.class);
- }
-
- @Override
- public Byte deserialize(final String stringRepresentation) {
- int base = provideBase(stringRepresentation);
- if (base == 16) {
- return Byte.valueOf(normalizeHexadecimal(stringRepresentation), base);
- }
- return Byte.valueOf(stringRepresentation, base);
- }
-
- @Override
- public String serialize(final Byte data) {
- return data == null ? "" : data.toString();
- }
- };
-
- public static class EmptyCodecStringImpl extends TypeDefinitionAwareCodec<Void, EmptyTypeDefinition> implements
- EmptyCodec<String> {
-
- protected EmptyCodecStringImpl(final Optional<EmptyTypeDefinition> typeDef) {
- super(typeDef, Void.class);
- }
-
- @Override
- public String serialize(final Void data) {
- return "";
- }
-
- @Override
- public Void deserialize(final String stringRepresentation) {
- Preconditions.checkArgument( Strings.isNullOrEmpty( stringRepresentation ),
- "The value must be empty" );
- return null;
- }
- };
-
- public static final class BinaryCodecStringImpl extends TypeDefinitionAwareCodec<byte[], BinaryTypeDefinition>
- implements BinaryCodec<String> {
-
- protected BinaryCodecStringImpl(final Optional<BinaryTypeDefinition> typeDef) {
- super(typeDef, byte[].class);
- }
-
- @Override
- public String serialize(final byte[] data) {
- return data == null ? "" : BaseEncoding.base64().encode(data);
- }
-
- @Override
- public byte[] deserialize(final String stringRepresentation) {
- return stringRepresentation == null ? null :
- BaseEncoding.base64().decode(stringRepresentation);
- }
- };
-
- public static final class BitsCodecStringImpl extends TypeDefinitionAwareCodec<Set<String>, BitsTypeDefinition>
- implements BitsCodec<String> {
-
- public static final Joiner JOINER = Joiner.on(" ").skipNulls();
- public static final Splitter SPLITTER = Splitter.on(' ').omitEmptyStrings().trimResults();
-
- @SuppressWarnings("unchecked")
- protected BitsCodecStringImpl(final Optional<BitsTypeDefinition> typeDef) {
- super(typeDef, (Class<Set<String>>) ((Class<?>) Set.class));
- }
-
- @Override
- public String serialize(final Set<String> data) {
- return data == null ? "" : JOINER.join(data);
- }
-
- @Override
- public Set<String> deserialize(final String stringRepresentation) {
- if (stringRepresentation == null) {
- return ImmutableSet.of();
- }
-
- Iterable<String> strings = SPLITTER.split(stringRepresentation);
-
- if( getTypeDefinition().isPresent() ) {
- Set<String> allowedNames = Sets.newHashSet();
- for( BitsTypeDefinition.Bit bit: getTypeDefinition().get().getBits() ) {
- allowedNames.add( bit.getName() );
- }
-
- for( String bit: strings ) {
- if( !allowedNames.contains( bit ) ) {
- throw new IllegalArgumentException(
- "Invalid value \"" + bit + "\" for bits type. Allowed values are: " +
- allowedNames );
- }
- }
- }
-
- return ImmutableSet.copyOf(strings);
- }
- };
-
- public static class EnumCodecStringImpl extends TypeDefinitionAwareCodec<String, EnumTypeDefinition> implements
- EnumCodec<String> {
-
- protected EnumCodecStringImpl(final Optional<EnumTypeDefinition> typeDef) {
- super(typeDef, String.class);
- }
-
- @Override
- public String deserialize(final String stringRepresentation) {
- if( getTypeDefinition().isPresent() ) {
- Set<String> allowedNames = Sets.newHashSet();
- for( EnumPair pair: getTypeDefinition().get().getValues() ) {
- allowedNames.add( pair.getName() );
- }
-
- if( !allowedNames.contains( stringRepresentation ) ) {
- throw new IllegalArgumentException(
- "Invalid value \"" + stringRepresentation + "\" for enum type. Allowed values are: " +
- allowedNames );
- }
- }
-
- return stringRepresentation;
- }
-
- @Override
- public String serialize(final String data) {
- return data == null ? "" : data;
- }
- };
-
- public static class DecimalCodecStringImpl extends TypeDefinitionAwareCodec<BigDecimal, DecimalTypeDefinition>
- implements DecimalCodec<String> {
-
- protected DecimalCodecStringImpl(final Optional<DecimalTypeDefinition> typeDef) {
- super(typeDef, BigDecimal.class);
- }
-
- @Override
- public String serialize(final BigDecimal data) {
- return data == null ? "" : data.toString();
- }
-
- @Override
- public BigDecimal deserialize(final String stringRepresentation) {
- Preconditions.checkArgument( stringRepresentation != null , "Input cannot be null" );
- return new BigDecimal(stringRepresentation);
- }
- };
-
- public static class UnionCodecStringImpl extends TypeDefinitionAwareCodec<Object, UnionTypeDefinition> implements
- UnionCodec<String> {
-
- protected UnionCodecStringImpl(final Optional<UnionTypeDefinition> typeDef) {
- super(typeDef, Object.class);
- }
-
- @Override
- public String serialize(final Object data) {
- return data == null ? "" : data.toString();
- }
-
- @Override
- public Object deserialize(final String stringRepresentation) {
- if( getTypeDefinition().isPresent() ) {
- boolean valid = false;
- for( TypeDefinition<?> type: getTypeDefinition().get().getTypes() ) {
- TypeDefinitionAwareCodec<Object, ? extends TypeDefinition<?>> typeAwareCodec = from( type );
- if( typeAwareCodec == null ) {
- // This is a type for which we have no codec (eg identity ref) so we'll say it's valid
- // but we'll continue in case there's another type for which we do have a codec.
- valid = true;
- continue;
- }
-
- try {
- typeAwareCodec.deserialize( stringRepresentation );
- valid = true;
- break;
- }
- catch( Exception e ) {
- // invalid - try the next union type.
- }
- }
-
- if( !valid ) {
- throw new IllegalArgumentException(
- "Invalid value \"" + stringRepresentation + "\" for union type." );
- }
- }
-
- return stringRepresentation;
- }
- };