[−][src]Module fxa_client::state_persistence
This module implements the ability to serialize a FirefoxAccount
struct to and from
a JSON string. The idea is that calling code will use this to persist the account state
to storage.
Many of the details here are a straightforward use of serde
, with all persisted data being
a field on a State
struct. This is, however, some additional complexity around handling data
migrations - we need to be able to evolve the internal details of the State
struct while
gracefully handing users who are upgrading from an older version of a consuming app, which has
stored account state from an older version of this component.
Data migration is handled by explicitly naming different versions of the state struct to
correspond to different incompatible changes to the data representation, e.g. StateV1
and
StateV2
. We then wrap this in a PersistedState
enum whose serialization gets explicitly
tagged with the corresponding state version number.
For backwards-compatible changes to the data (such as adding a new field that has a sensible
default) we keep the current State
struct, but modify it in such a way that serde
knows
how to do the right thing.
For backwards-incompatible changes to the data (such as removing or significantly refactoring
fields) we define a new StateV{X+1}
struct, and use the From
trait to define how to update
from older struct versions.
Structs
StateV1 | |
StateV2 | |
V1AuthInfo | |
V1Config |
Enums
PersistedState |
Functions
state_from_json | |
state_to_json | |
upgrade_state |
Type Definitions
State |