turbo_tasks/
macro_helpers.rs

1//! Runtime helpers for [turbo-tasks-macro].
2
3pub use async_trait::async_trait;
4pub use once_cell::sync::{Lazy, OnceCell};
5pub use serde;
6pub use shrink_to_fit;
7pub use tracing;
8
9use crate::{
10    NonLocalValue, RawVc, TaskInput, TaskPersistence, Vc, debug::ValueDebugFormatString,
11    task::TaskOutput,
12};
13pub use crate::{
14    magic_any::MagicAny,
15    manager::{find_cell_by_type, notify_scheduled_tasks, spawn_detached_for_testing},
16    native_function::{FunctionMeta, NativeFunction, downcast_args_owned, downcast_args_ref},
17};
18
19#[inline(never)]
20pub async fn value_debug_format_field(value: ValueDebugFormatString<'_>) -> String {
21    match value.try_to_value_debug_string().await {
22        Ok(result) => match result.await {
23            Ok(result) => result.to_string(),
24            Err(err) => format!("{err:?}"),
25        },
26        Err(err) => format!("{err:?}"),
27    }
28}
29
30pub fn get_non_local_persistence_from_inputs(inputs: &impl TaskInput) -> TaskPersistence {
31    if inputs.is_transient() {
32        TaskPersistence::Transient
33    } else {
34        TaskPersistence::Persistent
35    }
36}
37
38pub fn get_non_local_persistence_from_inputs_and_this(
39    this: RawVc,
40    inputs: &impl TaskInput,
41) -> TaskPersistence {
42    if this.is_transient() || inputs.is_transient() {
43        TaskPersistence::Transient
44    } else {
45        TaskPersistence::Persistent
46    }
47}
48
49pub fn assert_returns_non_local_value<ReturnType, Rv>()
50where
51    ReturnType: TaskOutput<Return = Vc<Rv>>,
52    Rv: NonLocalValue + Send,
53{
54}
55
56pub fn assert_argument_is_non_local_value<Argument: NonLocalValue>() {}
57
58#[macro_export]
59macro_rules! stringify_path {
60    ($path:path) => {
61        stringify!($path)
62    };
63}