wsdom_core/js/immediates/
nullable.rs1use crate::{
2 js::nullable::{JsNullable, JsNullish},
3 js_cast::JsCast,
4 serialize::{RawCodeImmediate, ToJs, UseInJsCode},
5};
6
7pub struct NullImmediate;
8
9impl UseInJsCode for NullImmediate {
10 fn serialize_to(&self, buf: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11 RawCodeImmediate("null").serialize_to(buf)
12 }
13}
14
15impl ToJs<JsNullish> for NullImmediate {}
16impl<T> ToJs<JsNullable<T>> for NullImmediate {}
17
18pub struct UndefinedImmediate;
19impl UseInJsCode for UndefinedImmediate {
20 fn serialize_to(&self, buf: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 RawCodeImmediate("undefined").serialize_to(buf)
22 }
23}
24
25impl ToJs<JsNullish> for UndefinedImmediate {}
26impl<T> ToJs<JsNullable<T>> for UndefinedImmediate {}
27
28pub const fn null() -> NullImmediate {
30 NullImmediate
31}
32
33pub const fn undefined() -> UndefinedImmediate {
35 UndefinedImmediate
36}
37
38impl<'a, T: UseInJsCode> UseInJsCode for Option<&'a T> {
39 fn serialize_to(&self, buf: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 match self {
41 Some(t) => t.serialize_to(buf),
42 None => NullImmediate.serialize_to(buf),
43 }
44 }
45}
46
47impl<'a, T, U> ToJs<JsNullable<T>> for Option<&'a U>
48where
49 T: JsCast,
50 U: UseInJsCode + ToJs<T>,
51{
52}