/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package software.amazon.awssdk.enhanced.dynamodb; import java.time.Instant; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.InstantAsStringAttributeConverter; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.StringAttributeConverter; import software.amazon.awssdk.services.dynamodb.model.AttributeValue; /** * Converts between a specific Java type and an {@link AttributeValue}. * *

* Examples: *

*/ @SdkPublicApi @ThreadSafe public interface AttributeConverter { /** * Convert the provided Java object into an {@link AttributeValue}. This will raise a {@link RuntimeException} if the * conversion fails, or the input is null. * *

* Example: *

     * {@code
     * InstantAsStringAttributeConverter converter = InstantAsStringAttributeConverter.create();
     * assertEquals(converter.transformFrom(Instant.EPOCH),
     *              EnhancedAttributeValue.fromString("1970-01-01T00:00:00Z").toAttributeValue());
     * }
     * 
*/ AttributeValue transformFrom(T input); /** * Convert the provided {@link AttributeValue} into a Java object. This will raise a {@link RuntimeException} if the * conversion fails, or the input is null. * *

*

     * Example:
     * {@code
     * InstantAsStringAttributeConverter converter = InstantAsStringAttributeConverter.create();
     * assertEquals(converter.transformTo(EnhancedAttributeValue.fromString("1970-01-01T00:00:00Z").toAttributeValue()),
     *              Instant.EPOCH);
     * }
     * 
*/ T transformTo(AttributeValue input); /** * The type supported by this converter. */ EnhancedType type(); /** * The {@link AttributeValueType} that a converter stores and reads values * from DynamoDB via the {@link AttributeValue} class. */ AttributeValueType attributeValueType(); }