Struct TrackballCamera

Source
pub struct TrackballCamera {
    pub frame: Frame<f32>,
    pub scope: Scope<f32>,
    pub blend: f32,
    pub reset: Frame<f32>,
    pub clamp: Option<Box<dyn Clamp<f32>>>,
    pub group: HashMap<Entity, bool>,
    /* private fields */
}
Expand description

Trackball camera component mainly defined by Frame and Scope.

Fields§

§frame: Frame<f32>

Camera frame defining Transform.

Comprises following properties:

  • target position as trackball center
  • camera eye rotation on trackball surface (incl. roll, gimbal lock-free using quaternion)
  • trackball radius
§scope: Scope<f32>

Camera scope defining Projection.

Comprises following properties:

  • field of view angle (default is 45 degrees) and its mode of either Fixed::Ver (default), Fixed::Hor, or Fixed::Upp.
  • projection mode of either perspective (default) or orthographic (scale preserving)
  • clip planes either measured from eye (default) or target (object inspection mode)
§blend: f32

Blend half-life from 0 (fast) to 1000 (slow) milliseconds. Default is 40.0.

It is the time passed until halfway of fps-agnostic exponential ease-out.

§reset: Frame<f32>

Camera frame to reset to when TrackballInput::reset_key is pressed.

§clamp: Option<Box<dyn Clamp<f32>>>

User boundary conditions clamping camera Frame.

Allows to limit target/eye position or minimal/maximal target/eye distance or up rotation.

§group: HashMap<Entity, bool>

Additional TrackballController entities to which this camera is sensitive.

It is always sensitive to its own controller if it has one. A mapped value of true will clamp the active controller as well and hence all other cameras of this group whenever this camera is clamped. If false, only this camera is clamped whereas other cameras of this group continue to follow the active controller.

Implementations§

Source§

impl TrackballCamera

Source

pub fn look_at(target: Vec3, eye: Vec3, up: Vec3) -> Self

Defines camera with target position and eye position inclusive its roll attitude (up).

Examples found in repository?
examples/exponential_map.rs (line 62)
34fn setup(
35	mut commands: Commands,
36	mut meshes: ResMut<Assets<Mesh>>,
37	mut materials: ResMut<Assets<StandardMaterial>>,
38) {
39	// circular base
40	commands.spawn((
41		Mesh3d(meshes.add(Circle::new(4.0))),
42		MeshMaterial3d(materials.add(Color::WHITE)),
43		Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)),
44	));
45	// cube
46	commands.spawn((
47		Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
48		MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
49		Transform::from_xyz(0.0, 0.5, 0.0),
50	));
51	// light
52	commands.spawn((
53		PointLight {
54			shadows_enabled: true,
55			..default()
56		},
57		Transform::from_xyz(4.0, 8.0, 4.0),
58	));
59	// camera
60	commands.spawn((
61		TrackballController::default(),
62		TrackballCamera::look_at(Vec3::Y * 0.5, Vec3::new(-2.5, 4.5, 9.0), Vec3::Y),
63		Camera3d::default(),
64	));
65}
More examples
Hide additional examples
examples/scaling_modes.rs (line 124)
28fn setup(
29	mut windows: Query<&mut Window>,
30	mut commands: Commands,
31	mut meshes: ResMut<Assets<Mesh>>,
32	mut materials: ResMut<Assets<StandardMaterial>>,
33) {
34	// circular base
35	commands.spawn((
36		Mesh3d(meshes.add(Circle::new(4.0))),
37		MeshMaterial3d(materials.add(Color::WHITE)),
38		Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)),
39	));
40	// cube
41	commands.spawn((
42		Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
43		MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
44		Transform::from_xyz(0.0, 0.5, 0.0),
45	));
46	// light
47	commands.spawn((
48		PointLight {
49			shadows_enabled: true,
50			..default()
51		},
52		Transform::from_xyz(4.0, 8.0, 4.0),
53	));
54
55	// Windows
56	let mut window1 = windows.single_mut().unwrap();
57	"Fixed Vertical Field of View (Perspective vs Orthographic)".clone_into(&mut window1.title);
58	let res = &window1.resolution;
59	let max = Vec2::new(res.width() * 0.5, res.height()).into();
60	// Left and right camera orientation.
61	let [target, eye, up] = [Vec3::Y * 0.5, Vec3::new(-2.5, 4.5, 9.0) * 1.2, Vec3::Y];
62	// Spawn a 2nd window.
63	let window2 = commands
64		.spawn(Window {
65			title: "Fixed Horizontal Field of View (Perspective vs Orthographic)".to_owned(),
66			..default()
67		})
68		.id();
69	// Spawn a 3rd window.
70	let window3 = commands
71		.spawn(Window {
72			title: "Fixed Unit Per Pixels (Perspective vs Orthographic)".to_owned(),
73			..default()
74		})
75		.id();
76
77	// Cameras
78	let mut order = 0;
79	let fov = Fixed::default();
80	for (fov, window) in [
81		(fov, WindowRef::Primary),
82		(fov.to_hor(&max), WindowRef::Entity(window2)),
83		(fov.to_upp(&max), WindowRef::Entity(window3)),
84	] {
85		let mut scope = Scope::default();
86		scope.set_fov(fov);
87		// Left trackball controller and camera 3D bundle.
88		let left = commands
89			.spawn((
90				TrackballController::default(),
91				Camera {
92					target: RenderTarget::Window(window),
93					// Renders the right camera after the left camera,
94					// which has a default priority of 0.
95					order,
96					..default()
97				},
98				Camera3d::default(),
99				LeftCamera,
100			))
101			.id();
102		order += 1;
103		// Right trackball controller and camera 3D bundle.
104		let right = commands
105			.spawn((
106				TrackballController::default(),
107				Camera {
108					target: RenderTarget::Window(window),
109					// Renders the right camera after the left camera,
110					// which has a default priority of 0.
111					order,
112					// Don't clear on the second camera
113					// because the first camera already cleared the window.
114					clear_color: ClearColorConfig::None,
115					..default()
116				},
117				Camera3d::default(),
118				RightCamera,
119			))
120			.id();
121		order += 1;
122		// Insert left trackball camera and make it sensitive to right trackball controller as well.
123		commands.entity(left).insert(
124			TrackballCamera::look_at(target, eye, up)
125				.with_scope(scope)
126				.add_controller(right, true),
127		);
128		// Set orthographic projection mode for right camera.
129		scope.set_ortho(true);
130		// Insert right trackball camera and make it sensitive to left trackball controller as well.
131		commands.entity(right).insert(
132			TrackballCamera::look_at(target, eye, up)
133				.with_scope(scope)
134				.add_controller(left, true),
135		);
136	}
137}
Source

pub const fn with_scope(self, scope: Scope<f32>) -> Self

Defines scope, see Self::scope.

Examples found in repository?
examples/scaling_modes.rs (line 125)
28fn setup(
29	mut windows: Query<&mut Window>,
30	mut commands: Commands,
31	mut meshes: ResMut<Assets<Mesh>>,
32	mut materials: ResMut<Assets<StandardMaterial>>,
33) {
34	// circular base
35	commands.spawn((
36		Mesh3d(meshes.add(Circle::new(4.0))),
37		MeshMaterial3d(materials.add(Color::WHITE)),
38		Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)),
39	));
40	// cube
41	commands.spawn((
42		Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
43		MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
44		Transform::from_xyz(0.0, 0.5, 0.0),
45	));
46	// light
47	commands.spawn((
48		PointLight {
49			shadows_enabled: true,
50			..default()
51		},
52		Transform::from_xyz(4.0, 8.0, 4.0),
53	));
54
55	// Windows
56	let mut window1 = windows.single_mut().unwrap();
57	"Fixed Vertical Field of View (Perspective vs Orthographic)".clone_into(&mut window1.title);
58	let res = &window1.resolution;
59	let max = Vec2::new(res.width() * 0.5, res.height()).into();
60	// Left and right camera orientation.
61	let [target, eye, up] = [Vec3::Y * 0.5, Vec3::new(-2.5, 4.5, 9.0) * 1.2, Vec3::Y];
62	// Spawn a 2nd window.
63	let window2 = commands
64		.spawn(Window {
65			title: "Fixed Horizontal Field of View (Perspective vs Orthographic)".to_owned(),
66			..default()
67		})
68		.id();
69	// Spawn a 3rd window.
70	let window3 = commands
71		.spawn(Window {
72			title: "Fixed Unit Per Pixels (Perspective vs Orthographic)".to_owned(),
73			..default()
74		})
75		.id();
76
77	// Cameras
78	let mut order = 0;
79	let fov = Fixed::default();
80	for (fov, window) in [
81		(fov, WindowRef::Primary),
82		(fov.to_hor(&max), WindowRef::Entity(window2)),
83		(fov.to_upp(&max), WindowRef::Entity(window3)),
84	] {
85		let mut scope = Scope::default();
86		scope.set_fov(fov);
87		// Left trackball controller and camera 3D bundle.
88		let left = commands
89			.spawn((
90				TrackballController::default(),
91				Camera {
92					target: RenderTarget::Window(window),
93					// Renders the right camera after the left camera,
94					// which has a default priority of 0.
95					order,
96					..default()
97				},
98				Camera3d::default(),
99				LeftCamera,
100			))
101			.id();
102		order += 1;
103		// Right trackball controller and camera 3D bundle.
104		let right = commands
105			.spawn((
106				TrackballController::default(),
107				Camera {
108					target: RenderTarget::Window(window),
109					// Renders the right camera after the left camera,
110					// which has a default priority of 0.
111					order,
112					// Don't clear on the second camera
113					// because the first camera already cleared the window.
114					clear_color: ClearColorConfig::None,
115					..default()
116				},
117				Camera3d::default(),
118				RightCamera,
119			))
120			.id();
121		order += 1;
122		// Insert left trackball camera and make it sensitive to right trackball controller as well.
123		commands.entity(left).insert(
124			TrackballCamera::look_at(target, eye, up)
125				.with_scope(scope)
126				.add_controller(right, true),
127		);
128		// Set orthographic projection mode for right camera.
129		scope.set_ortho(true);
130		// Insert right trackball camera and make it sensitive to left trackball controller as well.
131		commands.entity(right).insert(
132			TrackballCamera::look_at(target, eye, up)
133				.with_scope(scope)
134				.add_controller(left, true),
135		);
136	}
137}
Source

pub const fn with_blend(self, blend: f32) -> Self

Defines blend half-life, see Self::blend.

Source

pub const fn with_reset(self, reset: Frame<f32>) -> Self

Defines reset frame, see Self::reset.

Source

pub fn with_clamp(self, clamp: impl Clamp<f32>) -> Self

Defines user boundary conditions, see Self::clamp.

Source

pub fn add_controller(self, id: Entity, rigid: bool) -> Self

Adds additional controller to which this camera is sensitive, see Self::group.

Examples found in repository?
examples/scaling_modes.rs (line 126)
28fn setup(
29	mut windows: Query<&mut Window>,
30	mut commands: Commands,
31	mut meshes: ResMut<Assets<Mesh>>,
32	mut materials: ResMut<Assets<StandardMaterial>>,
33) {
34	// circular base
35	commands.spawn((
36		Mesh3d(meshes.add(Circle::new(4.0))),
37		MeshMaterial3d(materials.add(Color::WHITE)),
38		Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)),
39	));
40	// cube
41	commands.spawn((
42		Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))),
43		MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))),
44		Transform::from_xyz(0.0, 0.5, 0.0),
45	));
46	// light
47	commands.spawn((
48		PointLight {
49			shadows_enabled: true,
50			..default()
51		},
52		Transform::from_xyz(4.0, 8.0, 4.0),
53	));
54
55	// Windows
56	let mut window1 = windows.single_mut().unwrap();
57	"Fixed Vertical Field of View (Perspective vs Orthographic)".clone_into(&mut window1.title);
58	let res = &window1.resolution;
59	let max = Vec2::new(res.width() * 0.5, res.height()).into();
60	// Left and right camera orientation.
61	let [target, eye, up] = [Vec3::Y * 0.5, Vec3::new(-2.5, 4.5, 9.0) * 1.2, Vec3::Y];
62	// Spawn a 2nd window.
63	let window2 = commands
64		.spawn(Window {
65			title: "Fixed Horizontal Field of View (Perspective vs Orthographic)".to_owned(),
66			..default()
67		})
68		.id();
69	// Spawn a 3rd window.
70	let window3 = commands
71		.spawn(Window {
72			title: "Fixed Unit Per Pixels (Perspective vs Orthographic)".to_owned(),
73			..default()
74		})
75		.id();
76
77	// Cameras
78	let mut order = 0;
79	let fov = Fixed::default();
80	for (fov, window) in [
81		(fov, WindowRef::Primary),
82		(fov.to_hor(&max), WindowRef::Entity(window2)),
83		(fov.to_upp(&max), WindowRef::Entity(window3)),
84	] {
85		let mut scope = Scope::default();
86		scope.set_fov(fov);
87		// Left trackball controller and camera 3D bundle.
88		let left = commands
89			.spawn((
90				TrackballController::default(),
91				Camera {
92					target: RenderTarget::Window(window),
93					// Renders the right camera after the left camera,
94					// which has a default priority of 0.
95					order,
96					..default()
97				},
98				Camera3d::default(),
99				LeftCamera,
100			))
101			.id();
102		order += 1;
103		// Right trackball controller and camera 3D bundle.
104		let right = commands
105			.spawn((
106				TrackballController::default(),
107				Camera {
108					target: RenderTarget::Window(window),
109					// Renders the right camera after the left camera,
110					// which has a default priority of 0.
111					order,
112					// Don't clear on the second camera
113					// because the first camera already cleared the window.
114					clear_color: ClearColorConfig::None,
115					..default()
116				},
117				Camera3d::default(),
118				RightCamera,
119			))
120			.id();
121		order += 1;
122		// Insert left trackball camera and make it sensitive to right trackball controller as well.
123		commands.entity(left).insert(
124			TrackballCamera::look_at(target, eye, up)
125				.with_scope(scope)
126				.add_controller(right, true),
127		);
128		// Set orthographic projection mode for right camera.
129		scope.set_ortho(true);
130		// Insert right trackball camera and make it sensitive to left trackball controller as well.
131		commands.entity(right).insert(
132			TrackballCamera::look_at(target, eye, up)
133				.with_scope(scope)
134				.add_controller(left, true),
135		);
136	}
137}

Trait Implementations§

Source§

impl Component for TrackballCamera
where Self: Send + Sync + 'static,

Source§

const STORAGE_TYPE: StorageType = bevy::ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have [Component<Mutability = Mutable>], while immutable components will instead have [Component<Mutability = Immutable>]. Read more
Source§

fn register_required_components( requiree: ComponentId, components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, inheritance_depth: u16, recursion_check_stack: &mut Vec<ComponentId>, )

Registers required components.
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn register_component_hooks(hooks: &mut ComponentHooks)

👎Deprecated since 0.16.0: Use the individual hook methods instead (e.g., Component::on_add, etc.)
Called when registering this component, allowing mutable access to its ComponentHooks.
Source§

fn on_add() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_add ComponentHook for this Component if one is defined.
Source§

fn on_insert() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_insert ComponentHook for this Component if one is defined.
Source§

fn on_replace() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_replace ComponentHook for this Component if one is defined.
Source§

fn on_remove() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_remove ComponentHook for this Component if one is defined.
Source§

fn on_despawn() -> Option<for<'w> fn(_: DeferredWorld<'w>, _: HookContext)>

Gets the on_despawn ComponentHook for this Component if one is defined.
Source§

fn map_entities<E>(_this: &mut Self, _mapper: &mut E)
where E: EntityMapper,

Maps the entities on this component using the given EntityMapper. This is used to remap entities in contexts like scenes and entity cloning. When deriving Component, this is populated by annotating fields containing entities with #[entities] Read more
Source§

impl Debug for TrackballCamera

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<C> Bundle for C
where C: Component,

Source§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ids: &mut impl FnMut(ComponentId), )

Source§

fn register_required_components( components: &mut ComponentsRegistrator<'_>, required_components: &mut RequiredComponents, )

Registers components that are required by the components in this Bundle.
Source§

fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )

Gets this Bundle’s component ids. This will be None if the component has not been registered.
Source§

impl<C> BundleFromComponents for C
where C: Component,

Source§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>,

Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<C> DynamicBundle for C
where C: Component,

Source§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
Source§

fn get_components( self, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,