Struct Resource

Source
pub struct Resource<T, S> { /* private fields */ }
Expand description

A resource that enforces acquisition and release through the type system

§Type Parameters

  • T - The underlying resource type
  • S - The current state of the resource (phantom type)

§Example

use eventcore::resource::{Resource, states, ResourceManager};
use std::sync::Arc;

// Example with database pool resource (requires postgres feature)
// This would typically be used with eventcore-postgres crate:
// ```rust,ignore
// use eventcore::resource::database::{DatabaseResourceManager, DatabasePool};
// use sqlx::PgPool;
//
// let pool = Arc::new(PgPool::connect("postgres://localhost/mydb").await?);
// let manager = DatabaseResourceManager::new(pool);
// let db_resource = manager.acquire_pool().await?;
// let result = db_resource.execute_query("SELECT 1").await?;
// let _released = db_resource.release()?;
// ```

// Example with a custom resource type
struct MyResource {
    data: String,
}

// Implement ResourceManager for your type
struct MyResourceManager;

#[async_trait::async_trait]
impl ResourceManager<MyResource> for MyResourceManager {
    async fn acquire() -> Result<Resource<MyResource, states::Acquired>, eventcore::resource::ResourceError> {
        // In practice, you'd acquire from a pool or create the resource
        let resource = Self::create_initializing(MyResource { data: "example".to_string() });
        Ok(resource.mark_acquired())
    }
}

// Use the resource manager to acquire a resource
let resource = MyResourceManager::acquire().await?;

// Access the inner data (only possible in Acquired state)
let data = resource.get();
println!("Resource data: {}", data.data);

// Transition to released state
let _released: Resource<MyResource, states::Released> = resource.release()?;
// released resource cannot be used anymore (compile-time guarantee)

Implementations§

Source§

impl<T> Resource<Arc<Mutex<T>>, Acquired>

Extension methods for mutex resources

Source

pub fn lock(&self) -> ResourceResult<MutexGuardResource<'_, T>>

Acquire the mutex lock

Returns a guard resource that enforces lock is held

Source

pub fn try_lock(&self) -> ResourceResult<Option<MutexGuardResource<'_, T>>>

Try to acquire the mutex lock without blocking

Returns None if the lock is currently held

Source§

impl<T, S> Resource<T, S>

Source

pub const fn get(&self) -> &T
where S: IsAcquired,

Get a reference to the underlying resource

Only available when resource is acquired

Source

pub fn get_mut(&mut self) -> &mut T
where S: IsAcquired,

Get a mutable reference to the underlying resource

Only available when resource is acquired

Source

pub fn into_inner(self) -> T
where S: IsAcquired,

Consume the resource and return the inner value

Only available when resource is acquired

Source§

impl<T> Resource<T, Initializing>

State transitions for resources

Source

pub fn mark_acquired(self) -> Resource<T, Acquired>

Transition from initializing to acquired state

This represents successful resource acquisition

Source

pub fn mark_failed(self) -> Resource<T, Failed>

Transition from initializing to failed state

This represents failed resource acquisition

Source§

impl<T> Resource<T, Acquired>

Source

pub fn release(self) -> ResourceResult<Resource<T, Released>>

Release the resource, transitioning to released state

After release, the resource cannot be used anymore

Source

pub fn mark_failed(self) -> Resource<T, Failed>

Mark resource as failed due to an error

Failed resources can be recovered or released

Source§

impl<T> Resource<T, Failed>

Source

pub fn recover(self) -> ResourceResult<Resource<T, Acquired>>

Attempt to recover a failed resource

If successful, transitions back to acquired state

Source

pub fn release(self) -> ResourceResult<Resource<T, Released>>

Release a failed resource

This allows cleanup even when the resource is in a failed state

Source§

impl<T> Resource<T, Released>

Source

pub const fn is_released(&self) -> bool

Check if resource has been released

This is always true for resources in Released state

Source§

impl<T, S> Resource<T, S>

Source

pub fn managed(self, resource_type: &str) -> ManagedResource<T, S>

Create a managed resource for any state

Trait Implementations§

Source§

impl<T: Debug, S: Debug> Debug for Resource<T, S>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<T> ResourceExt<T, Acquired> for Resource<T, Acquired>

Source§

fn managed(self, resource_type: &str) -> ManagedResource<T, Acquired>

Wrap in a managed resource for automatic leak detection
Source§

fn scoped(self) -> ResourceScope<T>

Wrap in a scoped resource for automatic cleanup
Source§

fn with_timeout(self, timeout: Duration) -> TimedResourceGuard<T>
where T: Send + 'static,

Wrap in a timed guard for timeout-based cleanup

Auto Trait Implementations§

§

impl<T, S> Freeze for Resource<T, S>
where T: Freeze,

§

impl<T, S> RefUnwindSafe for Resource<T, S>

§

impl<T, S> Send for Resource<T, S>
where T: Send, S: Send,

§

impl<T, S> Sync for Resource<T, S>
where T: Sync, S: Sync,

§

impl<T, S> Unpin for Resource<T, S>
where T: Unpin, S: Unpin,

§

impl<T, S> UnwindSafe for Resource<T, S>
where T: UnwindSafe, S: 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<ES> EventStoreResourceExt<ES> for ES

Source§

fn into_resource(self) -> Resource<ES, Acquired>

Create an event store resource
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<D> OwoColorize for D

Source§

fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>
where C: Color,

Set the foreground color generically Read more
Source§

fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>
where C: Color,

Set the background color generically. Read more
Source§

fn black(&self) -> FgColorDisplay<'_, Black, Self>

Change the foreground color to black
Source§

fn on_black(&self) -> BgColorDisplay<'_, Black, Self>

Change the background color to black
Source§

fn red(&self) -> FgColorDisplay<'_, Red, Self>

Change the foreground color to red
Source§

fn on_red(&self) -> BgColorDisplay<'_, Red, Self>

Change the background color to red
Source§

fn green(&self) -> FgColorDisplay<'_, Green, Self>

Change the foreground color to green
Source§

fn on_green(&self) -> BgColorDisplay<'_, Green, Self>

Change the background color to green
Source§

fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>

Change the foreground color to yellow
Source§

fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>

Change the background color to yellow
Source§

fn blue(&self) -> FgColorDisplay<'_, Blue, Self>

Change the foreground color to blue
Source§

fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>

Change the background color to blue
Source§

fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to magenta
Source§

fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to magenta
Source§

fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>

Change the foreground color to purple
Source§

fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>

Change the background color to purple
Source§

fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>

Change the foreground color to cyan
Source§

fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>

Change the background color to cyan
Source§

fn white(&self) -> FgColorDisplay<'_, White, Self>

Change the foreground color to white
Source§

fn on_white(&self) -> BgColorDisplay<'_, White, Self>

Change the background color to white
Source§

fn default_color(&self) -> FgColorDisplay<'_, Default, Self>

Change the foreground color to the terminal default
Source§

fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>

Change the background color to the terminal default
Source§

fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>

Change the foreground color to bright black
Source§

fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>

Change the background color to bright black
Source§

fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>

Change the foreground color to bright red
Source§

fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>

Change the background color to bright red
Source§

fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>

Change the foreground color to bright green
Source§

fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>

Change the background color to bright green
Source§

fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>

Change the foreground color to bright yellow
Source§

fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>

Change the background color to bright yellow
Source§

fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>

Change the foreground color to bright blue
Source§

fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>

Change the background color to bright blue
Source§

fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright magenta
Source§

fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright magenta
Source§

fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>

Change the foreground color to bright purple
Source§

fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>

Change the background color to bright purple
Source§

fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>

Change the foreground color to bright cyan
Source§

fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>

Change the background color to bright cyan
Source§

fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>

Change the foreground color to bright white
Source§

fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>

Change the background color to bright white
Source§

fn bold(&self) -> BoldDisplay<'_, Self>

Make the text bold
Source§

fn dimmed(&self) -> DimDisplay<'_, Self>

Make the text dim
Source§

fn italic(&self) -> ItalicDisplay<'_, Self>

Make the text italicized
Source§

fn underline(&self) -> UnderlineDisplay<'_, Self>

Make the text underlined
Make the text blink
Make the text blink (but fast!)
Source§

fn reversed(&self) -> ReversedDisplay<'_, Self>

Swap the foreground and background colors
Source§

fn hidden(&self) -> HiddenDisplay<'_, Self>

Hide the text
Source§

fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>

Cross out the text
Source§

fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the foreground color at runtime. Only use if you do not know which color will be used at compile-time. If the color is constant, use either OwoColorize::fg or a color-specific method, such as OwoColorize::green, Read more
Source§

fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>
where Color: DynColor,

Set the background color at runtime. Only use if you do not know what color to use at compile-time. If the color is constant, use either OwoColorize::bg or a color-specific method, such as OwoColorize::on_yellow, Read more
Source§

fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the foreground color to a specific RGB value.
Source§

fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>

Set the background color to a specific RGB value.
Source§

fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>

Sets the foreground color to an RGB value.
Source§

fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>

Sets the background color to an RGB value.
Source§

fn style(&self, style: Style) -> Styled<&Self>

Apply a runtime-determined style
Source§

impl<S> SubscriptionResourceExt<S> for S

Source§

fn into_resource(self) -> Resource<S, Acquired>

Create a subscription resource
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<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