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();
}
}
}