use crate::{types::Value, Object, VerifiedObject};
use std::{borrow::Borrow, convert::AsRef, ops::Deref};
#[derive(Clone, Debug)]
#[repr(C)]
pub struct AnyObject {
value: Value,
}
impl From<Value> for AnyObject {
fn from(value: Value) -> Self {
AnyObject { value }
}
}
impl Into<Value> for AnyObject {
fn into(self) -> Value {
self.value
}
}
impl Borrow<Value> for AnyObject {
fn borrow(&self) -> &Value {
&self.value
}
}
impl AsRef<Value> for AnyObject {
fn as_ref(&self) -> &Value {
&self.value
}
}
impl AsRef<AnyObject> for AnyObject {
#[inline]
fn as_ref(&self) -> &Self {
self
}
}
impl<T: Object> From<&T> for AnyObject {
fn from(value: &T) -> Self {
value.to_any_object()
}
}
impl Object for AnyObject {
#[inline]
fn value(&self) -> Value {
self.value
}
}
impl Deref for AnyObject {
type Target = Value;
fn deref(&self) -> &Value {
&self.value
}
}
impl VerifiedObject for AnyObject {
fn is_correct_type<T: Object>(_: &T) -> bool {
true
}
fn error_message() -> &'static str {
unreachable!()
}
}
impl PartialEq for AnyObject {
fn eq(&self, other: &Self) -> bool {
self.equals(other)
}
}