You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel/Models/InvokeResult.cs

112 lines
3.3 KiB

6 years ago
using System;
using System.Runtime.Serialization;
using ZeroLevel.Services.Serialization;
namespace ZeroLevel.Models
{
/// <summary>
/// Результат выполнения действий
/// </summary>
[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
/// <summary>
/// Успех выполнения операции
/// </summary>
[DataMember]
public bool Success;
/// <summary>
/// Комментарий (сообщение об ошибке при сбое, или доп. информация)
/// </summary>
[DataMember]
public string Comment;
#endregion
#region Fabric methods
/// <summary>
/// Сбой при выполнении плана действий
/// </summary>
public static InvokeResult Fault(string comment) { return new InvokeResult(false, comment); }
/// <summary>
/// Успешное выполнение
/// </summary>
public static InvokeResult Succeeding(string comment = "") { return new InvokeResult(true, comment); }
/// <summary>
/// Успешное выполнение
/// </summary>
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<T> :
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<T> Succeeding(T value, string comment = "") { return new InvokeResult<T>(value, true, comment); }
public static InvokeResult<T> Fault<T>(string comment) { return new InvokeResult<T>(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<T>();
}
}
}

Powered by TurnKey Linux.