blob: c7c20395b55f8fc850a618043f6120d6da6e1732 [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library js_backend.serialization;
import '../common/backend_api.dart' show BackendSerialization;
import '../elements/elements.dart';
import '../serialization/serialization.dart'
show DeserializerPlugin, ObjectDecoder, ObjectEncoder, SerializerPlugin;
import '../serialization/keys.dart';
import 'js_backend.dart';
const String _BACKEND_DATA_TAG = 'jsBackendData';
class JavaScriptBackendSerialization implements BackendSerialization {
final JavaScriptBackendSerializer serializer;
final JavaScriptBackendDeserializer deserializer;
JavaScriptBackendSerialization(JavaScriptBackend backend)
: serializer = new JavaScriptBackendSerializer(backend),
deserializer = new JavaScriptBackendDeserializer(backend);
}
class JavaScriptBackendSerializer implements SerializerPlugin {
final JavaScriptBackend backend;
JavaScriptBackendSerializer(this.backend);
@override
void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
// TODO(johnniwinther): Add more data, e.g. js-interop names, native tags,
// etc.
String nativeName = backend.nativeData.nativeMemberName[element];
if (nativeName != null) {
ObjectEncoder encoder = createEncoder(_BACKEND_DATA_TAG);
encoder.setString(Key.NAME, nativeName);
}
}
}
class JavaScriptBackendDeserializer implements DeserializerPlugin {
final JavaScriptBackend backend;
JavaScriptBackendDeserializer(this.backend);
@override
void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
ObjectDecoder decoder = getDecoder(_BACKEND_DATA_TAG);
if (decoder != null) {
String nativeName = decoder.getString(Key.NAME);
backend.nativeData.nativeMemberName[element] = nativeName;
}
}
}