using System; using System.Runtime.Serialization; using ZeroLevel.Services.Serialization; namespace ZeroLevel.Models { /// /// Action result /// [DataContract] public class InvokeResult : IBinarySerializable { #region Static private static readonly InvokeResult _successResultWitoutComment = new InvokeResult(true, String.Empty); #endregion #region Ctor public InvokeResult() { } public InvokeResult(bool success, string comment) { Success = success; Comment = comment; } #endregion #region Properties /// /// true when action successfully invoked /// [DataMember] public bool Success; /// /// Comment /// [DataMember] public string Comment; #endregion #region Fabric methods /// /// Error when action invoking /// public static InvokeResult Fault(string comment) { return new InvokeResult(false, comment); } /// /// Successfully /// public static InvokeResult Succeeding(string comment = "") { return new InvokeResult(true, comment); } /// /// Successfully /// public static InvokeResult Succeeding() { return _successResultWitoutComment; } #endregion public virtual void Serialize(IBinaryWriter writer) { writer.WriteBoolean(this.Success); writer.WriteString(this.Comment); } public virtual void Deserialize(IBinaryReader reader) { this.Success = reader.ReadBoolean(); this.Comment = reader.ReadString(); } } public sealed class InvokeResult : InvokeResult { private T _value; public T Value { get { return _value; } } #region Ctor public InvokeResult(bool success, string comment) { Success = success; Comment = comment; } public InvokeResult(T value, bool success, string comment) { _value = value; Success = success; Comment = comment; } #endregion #region Fabric methods public static InvokeResult Succeeding(T value, string comment = "") { return new InvokeResult(value, true, comment); } public static InvokeResult Fault(string comment) { return new InvokeResult(false, comment); } #endregion public override void Serialize(IBinaryWriter writer) { writer.WriteBoolean(this.Success); writer.WriteString(this.Comment); writer.WriteCompatible(this.Value); } public override void Deserialize(IBinaryReader reader) { this.Success = reader.ReadBoolean(); this.Comment = reader.ReadString(); this._value = reader.ReadCompatible(); } } }