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);
private static readonly InvokeResult _faultResultWitoutComment = new InvokeResult(false, String.Empty);
#endregion Static
#region Ctor
public InvokeResult()
{
}
public InvokeResult(bool success, string comment)
{
Success = success;
Comment = comment;
}
#endregion Ctor
#region Properties
///
/// true when action successfully invoked
///
[DataMember]
public bool Success;
///
/// Comment
///
[DataMember]
public string Comment;
#endregion Properties
#region Fabric methods
///
/// Error when action invoking
///
public static InvokeResult Fault(string comment) { return new InvokeResult(false, comment); }
public static InvokeResult Fault() { return _faultResultWitoutComment; }
///
/// Successfully
///
public static InvokeResult Succeeding(string comment = "") { return new InvokeResult(true, comment); }
///
/// Successfully
///
public static InvokeResult Succeeding() { return _successResultWitoutComment; }
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 Fabric methods
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() { }
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 Ctor
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();
}
}
}