turbo_tasks/
primitives.rs1use std::time::Duration;
2
3use bincode::{
4 Decode, Encode,
5 de::Decoder,
6 enc::Encoder,
7 error::{DecodeError, EncodeError},
8};
9use turbo_rcstr::RcStr;
10use turbo_tasks_macros::primitive as __turbo_tasks_internal_primitive;
11
12use crate::{
13 self as turbo_tasks, Vc,
14 value_type::{ManualDecodeWrapper, ManualEncodeWrapper},
15};
16
17__turbo_tasks_internal_primitive!(());
18__turbo_tasks_internal_primitive!(String);
19__turbo_tasks_internal_primitive!(RcStr);
20__turbo_tasks_internal_primitive!(Option<String>);
21__turbo_tasks_internal_primitive!(Option<RcStr>);
22__turbo_tasks_internal_primitive!(Vec<RcStr>);
23__turbo_tasks_internal_primitive!(Option<u16>);
24__turbo_tasks_internal_primitive!(Option<u64>);
25__turbo_tasks_internal_primitive!(bool);
26__turbo_tasks_internal_primitive!(Option<bool>);
27__turbo_tasks_internal_primitive!(u8);
28__turbo_tasks_internal_primitive!(u16);
29__turbo_tasks_internal_primitive!(u32);
30__turbo_tasks_internal_primitive!(u64);
31__turbo_tasks_internal_primitive!(u128);
32__turbo_tasks_internal_primitive!(i8);
33__turbo_tasks_internal_primitive!(i16);
34__turbo_tasks_internal_primitive!(i32);
35__turbo_tasks_internal_primitive!(i64);
36__turbo_tasks_internal_primitive!(i128);
37__turbo_tasks_internal_primitive!(usize);
38__turbo_tasks_internal_primitive!(isize);
39__turbo_tasks_internal_primitive!(
40 serde_json::Value,
41 bincode_wrappers(JsonValueEncodeWrapper, JsonValueDecodeWrapper),
42);
43__turbo_tasks_internal_primitive!(Duration);
44__turbo_tasks_internal_primitive!(Vec<u8>);
45__turbo_tasks_internal_primitive!(Vec<bool>);
46
47struct JsonValueEncodeWrapper<'a>(&'a serde_json::Value);
48
49impl ManualEncodeWrapper for JsonValueEncodeWrapper<'_> {
50 type Value = serde_json::Value;
51
52 fn new<'a>(value: &'a Self::Value) -> impl Encode + 'a {
53 JsonValueEncodeWrapper(value)
54 }
55}
56
57impl Encode for JsonValueEncodeWrapper<'_> {
58 fn encode<E: Encoder>(&self, encoder: &mut E) -> Result<(), EncodeError> {
59 turbo_bincode::serde_self_describing::encode(self.0, encoder)
60 }
61}
62
63struct JsonValueDecodeWrapper(serde_json::Value);
64
65impl ManualDecodeWrapper for JsonValueDecodeWrapper {
66 type Value = serde_json::Value;
67
68 fn inner(self) -> Self::Value {
69 self.0
70 }
71}
72
73impl<Context> Decode<Context> for JsonValueDecodeWrapper {
74 fn decode<D: Decoder<Context = Context>>(decoder: &mut D) -> Result<Self, DecodeError> {
75 Ok(Self(turbo_bincode::serde_self_describing::decode(decoder)?))
76 }
77}