namespace Robust.Shared.Serialization.Manager.Result { public abstract class DeserializationResult { public abstract object? RawValue { get; } public abstract DeserializationResult PushInheritanceFrom(DeserializationResult source); public abstract DeserializationResult Copy(); public abstract void CallAfterDeserializationHook(); public T Cast() where T : DeserializationResult { if (this is T value) return value; throw new InvalidDeserializedResultTypeException(GetType()); } } public abstract class DeserializationResult : DeserializationResult { public abstract T? Value { get; } } }