| 1 | use std::fmt::{Display, Formatter, Result}; |
| 2 | |
| 3 | use crate::sys; |
| 4 | |
| 5 | #[repr (i32)] |
| 6 | #[derive (Eq, PartialEq, Debug, Clone, Copy)] |
| 7 | pub enum Status { |
| 8 | Ok = 0, |
| 9 | InvalidArg, |
| 10 | ObjectExpected, |
| 11 | StringExpected, |
| 12 | NameExpected, |
| 13 | FunctionExpected, |
| 14 | NumberExpected, |
| 15 | BooleanExpected, |
| 16 | ArrayExpected, |
| 17 | GenericFailure, |
| 18 | PendingException, |
| 19 | Cancelled, |
| 20 | EscapeCalledTwice, |
| 21 | HandleScopeMismatch, |
| 22 | CallbackScopeMismatch, |
| 23 | /// ThreadSafeFunction queue is full |
| 24 | QueueFull, |
| 25 | /// ThreadSafeFunction closed |
| 26 | Closing, |
| 27 | BigintExpected, |
| 28 | DateExpected, |
| 29 | ArrayBufferExpected, |
| 30 | DetachableArraybufferExpected, |
| 31 | WouldDeadlock, |
| 32 | NoExternalBuffersAllowed, |
| 33 | Unknown = 1024, // unknown status. for example, using napi3 module in napi7 Node.js, and generate an invalid napi3 status |
| 34 | } |
| 35 | |
| 36 | impl Display for Status { |
| 37 | fn fmt(&self, f: &mut Formatter<'_>) -> Result { |
| 38 | let status_string: String = format!(" {:?}" , self); |
| 39 | write!(f, " {}" , status_string) |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | impl AsRef<str> for Status { |
| 44 | fn as_ref(&self) -> &str { |
| 45 | match self { |
| 46 | Status::Ok => "Ok" , |
| 47 | Status::InvalidArg => "InvalidArg" , |
| 48 | Status::ObjectExpected => "ObjectExpected" , |
| 49 | Status::StringExpected => "StringExpected" , |
| 50 | Status::NameExpected => "NameExpected" , |
| 51 | Status::FunctionExpected => "FunctionExpected" , |
| 52 | Status::NumberExpected => "NumberExpected" , |
| 53 | Status::BooleanExpected => "BooleanExpected" , |
| 54 | Status::ArrayExpected => "ArrayExpected" , |
| 55 | Status::GenericFailure => "GenericFailure" , |
| 56 | Status::PendingException => "PendingException" , |
| 57 | Status::Cancelled => "Cancelled" , |
| 58 | Status::EscapeCalledTwice => "EscapeCalledTwice" , |
| 59 | Status::HandleScopeMismatch => "HandleScopeMismatch" , |
| 60 | Status::CallbackScopeMismatch => "CallbackScopeMismatch" , |
| 61 | Status::QueueFull => "QueueFull" , |
| 62 | Status::Closing => "Closing" , |
| 63 | Status::BigintExpected => "BigintExpected" , |
| 64 | Status::DateExpected => "DateExpected" , |
| 65 | Status::ArrayBufferExpected => "ArrayBufferExpected" , |
| 66 | Status::DetachableArraybufferExpected => "DetachableArraybufferExpected" , |
| 67 | Status::WouldDeadlock => "WouldDeadlock" , |
| 68 | Status::NoExternalBuffersAllowed => "NoExternalBuffersAllowed" , |
| 69 | _ => "Unknown" , |
| 70 | } |
| 71 | } |
| 72 | } |
| 73 | |
| 74 | impl From<i32> for Status { |
| 75 | fn from(code: i32) -> Self { |
| 76 | match code { |
| 77 | sys::Status::napi_ok => Status::Ok, |
| 78 | sys::Status::napi_invalid_arg => Status::InvalidArg, |
| 79 | sys::Status::napi_object_expected => Status::ObjectExpected, |
| 80 | sys::Status::napi_string_expected => Status::StringExpected, |
| 81 | sys::Status::napi_name_expected => Status::NameExpected, |
| 82 | sys::Status::napi_function_expected => Status::FunctionExpected, |
| 83 | sys::Status::napi_number_expected => Status::NumberExpected, |
| 84 | sys::Status::napi_boolean_expected => Status::BooleanExpected, |
| 85 | sys::Status::napi_array_expected => Status::ArrayExpected, |
| 86 | sys::Status::napi_generic_failure => Status::GenericFailure, |
| 87 | sys::Status::napi_pending_exception => Status::PendingException, |
| 88 | sys::Status::napi_cancelled => Status::Cancelled, |
| 89 | sys::Status::napi_escape_called_twice => Status::EscapeCalledTwice, |
| 90 | sys::Status::napi_handle_scope_mismatch => Status::HandleScopeMismatch, |
| 91 | sys::Status::napi_callback_scope_mismatch => Status::CallbackScopeMismatch, |
| 92 | sys::Status::napi_queue_full => Status::QueueFull, |
| 93 | sys::Status::napi_closing => Status::Closing, |
| 94 | sys::Status::napi_bigint_expected => Status::BigintExpected, |
| 95 | sys::Status::napi_date_expected => Status::DateExpected, |
| 96 | sys::Status::napi_arraybuffer_expected => Status::ArrayBufferExpected, |
| 97 | sys::Status::napi_detachable_arraybuffer_expected => Status::DetachableArraybufferExpected, |
| 98 | sys::Status::napi_would_deadlock => Status::WouldDeadlock, |
| 99 | sys::Status::napi_no_external_buffers_allowed => Status::NoExternalBuffersAllowed, |
| 100 | _ => Status::Unknown, |
| 101 | } |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | impl From<Status> for i32 { |
| 106 | fn from(code: Status) -> Self { |
| 107 | match code { |
| 108 | Status::Ok => sys::Status::napi_ok, |
| 109 | Status::InvalidArg => sys::Status::napi_invalid_arg, |
| 110 | Status::ObjectExpected => sys::Status::napi_object_expected, |
| 111 | Status::StringExpected => sys::Status::napi_string_expected, |
| 112 | Status::NameExpected => sys::Status::napi_name_expected, |
| 113 | Status::FunctionExpected => sys::Status::napi_function_expected, |
| 114 | Status::NumberExpected => sys::Status::napi_number_expected, |
| 115 | Status::BooleanExpected => sys::Status::napi_boolean_expected, |
| 116 | Status::ArrayExpected => sys::Status::napi_array_expected, |
| 117 | Status::GenericFailure => sys::Status::napi_generic_failure, |
| 118 | Status::PendingException => sys::Status::napi_pending_exception, |
| 119 | Status::Cancelled => sys::Status::napi_cancelled, |
| 120 | Status::EscapeCalledTwice => sys::Status::napi_escape_called_twice, |
| 121 | Status::HandleScopeMismatch => sys::Status::napi_handle_scope_mismatch, |
| 122 | Status::CallbackScopeMismatch => sys::Status::napi_callback_scope_mismatch, |
| 123 | Status::QueueFull => sys::Status::napi_queue_full, |
| 124 | Status::Closing => sys::Status::napi_closing, |
| 125 | Status::BigintExpected => sys::Status::napi_bigint_expected, |
| 126 | Status::DateExpected => sys::Status::napi_date_expected, |
| 127 | Status::ArrayBufferExpected => sys::Status::napi_arraybuffer_expected, |
| 128 | Status::DetachableArraybufferExpected => sys::Status::napi_detachable_arraybuffer_expected, |
| 129 | Status::WouldDeadlock => sys::Status::napi_would_deadlock, |
| 130 | Status::NoExternalBuffersAllowed => sys::Status::napi_no_external_buffers_allowed, |
| 131 | Status::Unknown => sys::Status::napi_generic_failure, |
| 132 | } |
| 133 | } |
| 134 | } |
| 135 | |