Skip to main content

App

Struct App 

Source
pub struct App<State, Build> { /* private fields */ }
Expand description

A Frust application: the app state plus the build closure that maps it to a view tree.

This is the low-level primitive. app! and run expand into App::new(state, move |state| root.build(state)) (see run_with_setup_and_config); ordinary apps write a Component and start it with those instead of constructing an App by hand.

Construct with App::new and start the event loop with App::run, optionally naming a desktop identity with App::desktop in between.

The view type is intentionally not a parameter of this struct: capturing a build fn’s impl View<State> opaque return type into a stored type parameter defeats method resolution (the opaque type’s trait bounds can’t be re-proven on the already-typed value). Instead App::run infers the view type freshly at the call site, so App::new(state, build).run() compiles for both impl View and concrete-typed build.

Implementations§

Source§

impl<State, Build> App<State, Build>

Source

pub fn new(state: State, build: Build) -> Self

Create an app from an initial state and its build closure.

build is a FnMut(&mut State) -> impl View<State> re-run each frame to produce the current view tree.

Source§

impl<State: 'static, Build> App<State, Build>

Source

pub fn desktop(self, config: DesktopConfig) -> Self

Give the app a desktop identity — name, reverse-DNS id, window icon, native menu bar, last-window-close policy (see DesktopConfig).

Optional: an app that never calls this runs with DesktopConfig::default(), which is the dev-preview window exactly as it has always been. Each per-OS shell reads the fields it can act on and ignores the rest (Linux has no native menu bar, macOS wants an application icon rather than a window one, and so on).

// `App::new` is the low-level primitive; apps normally use a `Component`.
frust::App::new(AppState, build)
    .desktop(frust::DesktopConfig::new().with_app_name("Huddle"))
    .run()
    .unwrap();
Source

pub fn run<V>(self) -> Result<()>
where V: View<State>, Build: FnMut(&mut State) -> V + 'static,

Run the app in the desktop window until it is closed.

Blocks the calling thread on the platform event loop. Returns once the window closes, or an error if the window/GPU surface could not be created. The concrete view type V is inferred from build.

Desktop-only: on Android the app is driven by the JNI bridge that android_app! generates and on iOS by the C-ABI entry points ios_app! generates, not by this loop.

Auto Trait Implementations§

§

impl<State, Build> Freeze for App<State, Build>
where State: Freeze, Build: Freeze,

§

impl<State, Build> RefUnwindSafe for App<State, Build>
where State: RefUnwindSafe, Build: RefUnwindSafe,

§

impl<State, Build> Send for App<State, Build>
where State: Send, Build: Send,

§

impl<State, Build> Sync for App<State, Build>
where State: Sync, Build: Sync,

§

impl<State, Build> Unpin for App<State, Build>
where State: Unpin, Build: Unpin,

§

impl<State, Build> UnsafeUnpin for App<State, Build>
where State: UnsafeUnpin, Build: UnsafeUnpin,

§

impl<State, Build> UnwindSafe for App<State, Build>
where State: UnwindSafe, Build: UnwindSafe,

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> 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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> DowncastSync for T
where T: Any + Send + Sync,

Source§

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

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<T> ErasedDestructor for T
where T: 'static,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

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

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