blob: 62da932878368c3d6a7712f0729d4a1dfb5adc4b [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert';
import 'dart:typed_data';
import 'package:fidl_fuchsia_ledger/fidl.dart' as ledger;
import '../schema/schema.dart';
import '../uint8list_ops.dart';
import 'kv_encoding.dart' as sledge_storage;
/// Returns the key used to store [schema] in Ledger.
Uint8List _schemaStorageKey(Schema schema) {
final key = concatUint8Lists(
sledge_storage.prefixForType(sledge_storage.KeyValueType.schema),
schema.hash);
assert(key.length == sledge_storage.typePrefixLength + Schema.hashLength);
return key;
}
/// Stores [schema] into [page].
void saveSchemaToPage(Schema schema, ledger.Page page) {
final Uint8List key = _schemaStorageKey(schema);
String jsonString = json.encode(schema);
final Uint8List value = getUint8ListFromString(jsonString);
// TODO: handle the case where |value| is larger than the maximum allowed
// size.
page.put(
key,
value,
);
}