fn clone(&self) -> Self {
        match self.unpack_ref() {
            ValueDetail::Root(indom) | ValueDetail::NodeInDom(indom) => Value::from(indom),
            ValueDetail::Null => Value::new_null(),
            ValueDetail::Bool(b) => Value::new_bool(b),
            ValueDetail::Number(n) => n.into(),
            ValueDetail::StaticStr(s) => Value::from_static_str(s),
            ValueDetail::FastStr(s) => s.into(),
            ValueDetail::RawNumFasStr(s) => Value::new_rawnum_faststr(s),
            ValueDetail::Array(a) => a.clone().into(),
            ValueDetail::Object(o) => o.clone().into(),
            ValueDetail::EmptyArray => Value::new_array(),
            ValueDetail::EmptyObject => Value::new_object(),
        }
    }
Clone the value, if the value is a root node, we will create a new allocator for it.

# Example

```
use sonic_rs::json;

let a = json!({"a": [1, 2, 3]});
assert_eq!(a, a.clone());
```
src/value/node.rs