ceylon.language.serialization.SerializationContext.ceylon Maven / Gradle / Ivy
import ceylon.language.meta {
classDeclaration, type
}
"A context representing serialization of many objects to a
single output stream.
The serialization library obtains an instance by calling
[[serialization]] and then uses
[[references]] to traverse the instances reachable from the
instance(s) being serialized.
It is the serialization library's responsibility to
manage object identity and handle cycles in the graph
of object references. For example a serialization library
that produced a hierarchical format might ignore identity
when an instance is encountered multiple times
(resulting in duplicate subtrees in the output), and
simply throw an exception if it encountered a cycle.
"
shared sealed
interface SerializationContext {
// could be generic
"Obtain the references of the given instance."
throws(`class SerializationException`,
"If the class is not serializable")
shared formal References references(Anything instance);
}
class SerializationContextImpl() satisfies SerializationContext {
shared actual References references(Anything instance) {
if (classDeclaration(instance).serializable) {
return ReferencesImpl(instance);
} else {
throw SerializationException("instance of non-serializable class: ``type(instance)``");
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy