@@ -47,6 +47,38 @@ const std::string capability_generation_key("capability_generation_key");
4747
4848static ww::exchange::LedgerStore ledger_store (" token_ledger" );
4949
50+ // -----------------------------------------------------------------
51+ // NAME: get_token_metadata
52+ //
53+ // Pulls the stored token metadata (which is a serialized JSON object),
54+ // verifies the schema of the metadata, and returns it in the
55+ // token_metadata parameter. The expectation is that this function
56+ // will be called by token classes that specialize token behavior.
57+ // -----------------------------------------------------------------
58+ bool ww::exchange::token_object::get_token_metadata (
59+ const std::string& schema,
60+ ww::value::Object& token_metadata)
61+ {
62+ std::string serialized_token_metadata;
63+ ERROR_IF_NOT (token_object_store.get (token_metadata_key, serialized_token_metadata),
64+ " unexpected error: failed to get token metadata" );
65+
66+ ww::value::Object deserialized_token_metadata;
67+ ERROR_IF_NOT (deserialized_token_metadata.deserialize (serialized_token_metadata.c_str ()),
68+ " unexpected error: failed to deserialized token metadata" );
69+
70+ ww::value::Object token_metadata_schema;
71+ ERROR_IF_NOT (token_metadata_schema.deserialize (schema.c_str ()),
72+ " unexpected error: failed to deserialize token metadata schema" );
73+
74+ ERROR_IF_NOT (deserialized_token_metadata.validate_schema (token_metadata_schema),
75+ " unexpected error: token metadata does not match schema" );
76+
77+ token_metadata.set (deserialized_token_metadata);
78+ return true ;
79+ }
80+
81+
5082// -----------------------------------------------------------------
5183// METHOD: initialize_contract
5284// -----------------------------------------------------------------
0 commit comments