Skip to main content

HumusEngine

Struct HumusEngine 

Source
pub struct HumusEngine<ApiFormat>
where ApiFormat: HumusApiFormat,
{ pub templating_engine: TemplatingEngine<ApiFormat>, pub language_engine: Arc<LanguageEngine>, /* private fields */ }
Expand description

🌱 An all in one datatype that takes care of frontend rendering.

You should construct one using a crate::HumusEngineLoader unless you have a very good reason not to.

The ApiFormat type defines which API responses your implementation can produce. For a good default you can use JsonOnlyApiFormat.

Note: The private field is a PhantomData because the engine only works correctly when ApiFormat stays the same throuout its life, but it doesn’t have to store one of those.

The HumusEngine itself is a container for the TemplatingEngine which takes care of rendering text templates and API responses and the LanguageEngine which can be used by the TemplateEngine and your code to provide localized results.

Your main point of interaction will be the render_view function which you can use after fetching all the data your frontend needs to tun the data into an HTTP response.

Fields§

§templating_engine: TemplatingEngine<ApiFormat>

The templating engine responsible for rendering text templates

§language_engine: Arc<LanguageEngine>

The language engine that is responsible for localizing this template

Implementations§

Source§

impl<ApiFormat> HumusEngine<ApiFormat>
where ApiFormat: HumusApiFormat,

Source

pub fn new( templating_engine: TemplatingEngine<ApiFormat>, language_engine: Arc<LanguageEngine>, ) -> Self

Creates a new Templating Engine.

An alternative would be converting from a HumusProtoEngine.

Source

pub fn render_view<S: HumusQuerySettings>( &self, settings: &S, view: impl HumusView<S, ApiFormat>, ) -> Response

Takes settings and a view, converting it to a serveable response.

Example:

ⓘ
async fn hello_world_handler(
	State(arc_state): State<Arc<ServiceSharedState>>,
	Extension(settings): Extension<QuerySettings>,
) -> Response {
	let state = Arc::clone(&arc_state);

	state.templating_engine.render_view(
		&settings,
		View::Message{
			title: "Hey There!".to_string(),
			message: "You are an awesome creature!".to_string()
		},
	)
}
Source

pub fn language_engine(&self) -> &LanguageEngine

Accessor for the localization engine inside this HumusEngine

You can use this to localize text elsewhere in your code.

Source

pub fn templates_manifest(&self) -> &TemplatesManifest

Accessor for the templates manifest inside this HumusEngine

Source

pub fn list_available_formats(&self) -> HashSet<HumusFormatIdentifier>

Returns a HashSet of all valid format identifiers this HumusEngine can render

Source

pub fn get_format_chooser(&self) -> FormatChooser

Returns a FormatChooser matching this HumusEngine.

Source

pub fn get_template_settings_layer(&self) -> TemplateSettingsLayer

Constructs a ready to use TemplateSettingsLayer that matches the configuration of this engine.

Trait Implementations§

Source§

impl<ApiFormat> Clone for HumusEngine<ApiFormat>
where ApiFormat: HumusApiFormat + Clone,

Source§

fn clone(&self) -> HumusEngine<ApiFormat>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<ApiFormat> Debug for HumusEngine<ApiFormat>
where ApiFormat: HumusApiFormat + Debug,

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<ApiFormat> !RefUnwindSafe for HumusEngine<ApiFormat>

§

impl<ApiFormat> !UnwindSafe for HumusEngine<ApiFormat>

§

impl<ApiFormat> Freeze for HumusEngine<ApiFormat>

§

impl<ApiFormat> Send for HumusEngine<ApiFormat>

§

impl<ApiFormat> Sync for HumusEngine<ApiFormat>
where ApiFormat: Sync,

§

impl<ApiFormat> Unpin for HumusEngine<ApiFormat>
where ApiFormat: Unpin,

§

impl<ApiFormat> UnsafeUnpin for HumusEngine<ApiFormat>

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

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> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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> 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