summaryrefslogtreecommitdiff
path: root/serde_v8/payload.rs
diff options
context:
space:
mode:
Diffstat (limited to 'serde_v8/payload.rs')
-rw-r--r--serde_v8/payload.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/serde_v8/payload.rs b/serde_v8/payload.rs
new file mode 100644
index 000000000..c9f3e85aa
--- /dev/null
+++ b/serde_v8/payload.rs
@@ -0,0 +1,40 @@
+// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
+
+// TODO: maybe add a Payload type that holds scope & v8::Value
+// so it can implement Deserialize by itself
+
+// Classifies v8::Values into sub-types
+#[derive(Debug)]
+pub enum ValueType {
+ Null,
+ Bool,
+ Number,
+ String,
+ Array,
+ ArrayBuffer,
+ ArrayBufferView,
+ Object,
+}
+
+impl ValueType {
+ pub fn from_v8(v: v8::Local<v8::Value>) -> ValueType {
+ if v.is_boolean() {
+ return Self::Bool;
+ } else if v.is_number() {
+ return Self::Number;
+ } else if v.is_string() {
+ return Self::String;
+ } else if v.is_array() {
+ return Self::Array;
+ } else if v.is_array_buffer() {
+ return Self::ArrayBuffer;
+ } else if v.is_array_buffer_view() {
+ return Self::ArrayBufferView;
+ } else if v.is_object() {
+ return Self::Object;
+ } else if v.is_null_or_undefined() {
+ return Self::Null;
+ }
+ panic!("serde_v8: unknown ValueType for v8::Value")
+ }
+}