com.google.web.bindery.requestfactory.shared

## Interface ProxySerializer

-     public interface ProxySerializer

  Serializes graphs of EntityProxy objects. A ProxySerializer is associated with an instance of a `ProxyStore` when it is created via `RequestFactory.getSerializer(ProxyStore)`.

  The `EntityProxy.stableId()` of non-persisted (i.e. newly `created`) `EntityProxy` instances are not stable.

  To create a self-contained message that encapsulates a proxy:

       RequestFactory myFactory = ...;
       MyFooProxy someProxy = ...;

       DefaultProxyStore store = new DefaultProxyStore();
       ProxySerializer ser = myFactory.getSerializer(store);
       // More than one proxy could be serialized
       String key = ser.serialize(someProxy);
       // Create the flattened representation
       String payload = store.encode();

  To recreate the object:

       ProxyStore store = new DefaultProxyStore(payload);
       ProxySerializer ser = myFactory.getSerializer(store);
       MyFooProxy someProxy = ser.deserialize(MyFooProxy.class, key);

  If two objects refer to different EntityProxy instances that have the same stableId(), the last mutable proxy encountered will be preferred, otherwise the first immutable proxy will be used.
  See Also:
    `DefaultProxyStore`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `<T extends BaseProxy> T` | `deserialize(java.lang.Class<T> proxyType, java.lang.String key)` Recreate a proxy instance that was previously passed to `serialize(BaseProxy)`.
    `<T extends EntityProxy> T` | `deserialize(EntityProxyId<T> id)` Recreate a `EntityProxy` instance that was previously passed to `serialize(BaseProxy)`.
    `java.lang.String` | `serialize(BaseProxy proxy)` Store a proxy into the backing store.

- - ### Method Detail

    - #### deserialize

          <T extends BaseProxy> T deserialize(java.lang.Class<T> proxyType,
                                            java.lang.String key)

      Recreate a proxy instance that was previously passed to `serialize(BaseProxy)`.
      Type Parameters:
        `T` - the type of proxy object to create
      Parameters:
        `proxyType` - the type of proxy object to create
        `key` - a value previously returned from `serialize(BaseProxy)`
      Returns:
        a new, immutable instance of the proxy or `null` if the data needed to deserialize the proxy is not present in the ProxyStore

    - #### deserialize

          <T extends EntityProxy> T deserialize(EntityProxyId<T> id)

      Recreate a `EntityProxy` instance that was previously passed to `serialize(BaseProxy)`.
      Type Parameters:
        `T` - the type of proxy object to create
      Parameters:
        `id` - the `EntityProxyId` of the desired entity
      Returns:
        a new, immutable instance of the proxy or `null` if the data needed to deserialize the proxy is not present in the ProxyStore

    - #### serialize

          java.lang.String serialize(BaseProxy proxy)

      Store a proxy into the backing store.
      Parameters:
        `proxy` - the proxy to store
      Returns:
        a key value that can be passed to `deserialize(Class, String)`