274 lines
7.2 KiB
C#
274 lines
7.2 KiB
C#
// Copyright (c) 2021 homuler
|
|
//
|
|
// Use of this source code is governed by an MIT-style
|
|
// license that can be found in the LICENSE file or at
|
|
// https://opensource.org/licenses/MIT.
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Mediapipe
|
|
{
|
|
public class Status : MpResourceHandle
|
|
{
|
|
public enum StatusCode : int
|
|
{
|
|
Ok = 0,
|
|
Cancelled = 1,
|
|
Unknown = 2,
|
|
InvalidArgument = 3,
|
|
DeadlineExceeded = 4,
|
|
NotFound = 5,
|
|
AlreadyExists = 6,
|
|
PermissionDenied = 7,
|
|
ResourceExhausted = 8,
|
|
FailedPrecondition = 9,
|
|
Aborted = 10,
|
|
OutOfRange = 11,
|
|
Unimplemented = 12,
|
|
Internal = 13,
|
|
Unavailable = 14,
|
|
DataLoss = 15,
|
|
Unauthenticated = 16,
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public readonly struct StatusArgs
|
|
{
|
|
private readonly StatusCode _code;
|
|
private readonly IntPtr _message;
|
|
|
|
private StatusArgs(StatusCode code, string message = null)
|
|
{
|
|
_code = code;
|
|
_message = Marshal.StringToHGlobalAnsi(message);
|
|
}
|
|
|
|
public static StatusArgs Ok()
|
|
{
|
|
return new StatusArgs(StatusCode.Ok);
|
|
}
|
|
|
|
public static StatusArgs Cancelled(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Cancelled, message);
|
|
}
|
|
|
|
public static StatusArgs Unknown(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Unknown, message);
|
|
}
|
|
|
|
public static StatusArgs InvalidArgument(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.InvalidArgument, message);
|
|
}
|
|
|
|
public static StatusArgs DeadlineExceeded(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.DeadlineExceeded, message);
|
|
}
|
|
|
|
public static StatusArgs NotFound(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.NotFound, message);
|
|
}
|
|
|
|
public static StatusArgs AlreadyExists(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.AlreadyExists, message);
|
|
}
|
|
|
|
public static StatusArgs PermissionDenied(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.PermissionDenied, message);
|
|
}
|
|
|
|
public static StatusArgs ResourceExhausted(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.ResourceExhausted, message);
|
|
}
|
|
|
|
public static StatusArgs FailedPrecondition(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.FailedPrecondition, message);
|
|
}
|
|
|
|
public static StatusArgs Aborted(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Aborted, message);
|
|
}
|
|
|
|
public static StatusArgs OutOfRange(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.OutOfRange, message);
|
|
}
|
|
|
|
public static StatusArgs Unimplemented(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Unimplemented, message);
|
|
}
|
|
|
|
public static StatusArgs Internal(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Internal, message);
|
|
}
|
|
|
|
public static StatusArgs Unavailable(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Unavailable, message);
|
|
}
|
|
|
|
public static StatusArgs DataLoss(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.DataLoss, message);
|
|
}
|
|
|
|
public static StatusArgs Unauthenticated(string message = null)
|
|
{
|
|
return new StatusArgs(StatusCode.Unauthenticated, message);
|
|
}
|
|
}
|
|
|
|
public Status(IntPtr ptr, bool isOwner = true) : base(ptr, isOwner) { }
|
|
|
|
protected override void DeleteMpPtr()
|
|
{
|
|
UnsafeNativeMethods.absl_Status__delete(ptr);
|
|
}
|
|
|
|
private bool? _ok;
|
|
private int? _rawCode;
|
|
|
|
public void AssertOk()
|
|
{
|
|
if (!Ok())
|
|
{
|
|
throw new MediaPipeException(ToString());
|
|
}
|
|
}
|
|
|
|
public bool Ok()
|
|
{
|
|
if (_ok is bool valueOfOk)
|
|
{
|
|
return valueOfOk;
|
|
}
|
|
_ok = SafeNativeMethods.absl_Status__ok(mpPtr);
|
|
return (bool)_ok;
|
|
}
|
|
|
|
public StatusCode Code()
|
|
{
|
|
return (StatusCode)RawCode();
|
|
}
|
|
|
|
public int RawCode()
|
|
{
|
|
if (_rawCode is int valueOfRawCode)
|
|
{
|
|
return valueOfRawCode;
|
|
}
|
|
_rawCode = SafeNativeMethods.absl_Status__raw_code(mpPtr);
|
|
return (int)_rawCode;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return MarshalStringFromNative(UnsafeNativeMethods.absl_Status__ToString);
|
|
}
|
|
|
|
public static Status Build(StatusCode code, string message, bool isOwner = true)
|
|
{
|
|
UnsafeNativeMethods.absl_Status__i_PKc((int)code, message, out var ptr).Assert();
|
|
|
|
return new Status(ptr, isOwner);
|
|
}
|
|
|
|
public static Status Ok(bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Ok, "", isOwner);
|
|
}
|
|
|
|
public static Status Cancelled(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Cancelled, message, isOwner);
|
|
}
|
|
|
|
public static Status Unknown(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Unknown, message, isOwner);
|
|
}
|
|
|
|
public static Status InvalidArgument(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.InvalidArgument, message, isOwner);
|
|
}
|
|
|
|
public static Status DeadlineExceeded(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.DeadlineExceeded, message, isOwner);
|
|
}
|
|
|
|
public static Status NotFound(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.NotFound, message, isOwner);
|
|
}
|
|
|
|
public static Status AlreadyExists(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.AlreadyExists, message, isOwner);
|
|
}
|
|
|
|
public static Status PermissionDenied(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.PermissionDenied, message, isOwner);
|
|
}
|
|
|
|
public static Status ResourceExhausted(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.ResourceExhausted, message, isOwner);
|
|
}
|
|
|
|
public static Status FailedPrecondition(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.FailedPrecondition, message, isOwner);
|
|
}
|
|
|
|
public static Status Aborted(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Aborted, message, isOwner);
|
|
}
|
|
|
|
public static Status OutOfRange(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.OutOfRange, message, isOwner);
|
|
}
|
|
|
|
public static Status Unimplemented(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Unimplemented, message, isOwner);
|
|
}
|
|
|
|
public static Status Internal(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Internal, message, isOwner);
|
|
}
|
|
|
|
public static Status Unavailable(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Unavailable, message, isOwner);
|
|
}
|
|
|
|
public static Status DataLoss(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.DataLoss, message, isOwner);
|
|
}
|
|
|
|
public static Status Unauthenticated(string message = "", bool isOwner = true)
|
|
{
|
|
return Build(StatusCode.Unauthenticated, message, isOwner);
|
|
}
|
|
}
|
|
}
|