#dispose #using #resource-mangement

use-with

Provides resource management utilities inspired by Kotlin's 'use' function and C#'s 'using' block, ensuring proper utilization and disposal of resources in Rust

2 unstable releases

new 0.2.0 Dec 17, 2024
0.1.0 Dec 17, 2024

MIT license

15KB
180 lines

use_with

codecov

Provides resource management utilities, ensuring that resources are properly utilized and subsequently dropped, similar to patterns found in other programming languages like Kotlin's use function and C#'s using block.

This module offers two primary functions:

  • use_with: Executes a closure synchronously, consuming the resource.
  • use_with_async: Executes an asynchronous closure, consuming the resource.

These functions facilitate safe and efficient resource handling, ensuring that resources are properly utilized and dropped, even in asynchronous contexts.

Features

  • Synchronous Resource Management: The use_with function allows for synchronous operations on resources, ensuring that resources are properly utilized and dropped after the operation completes.

  • Asynchronous Resource Management: The use_with_async function facilitates asynchronous operations on resources, ensuring that resources are properly utilized and dropped after the asynchronous operation completes.

Usage

To use these functions, the Use trait is auto-implemented for your resource types; simply call the appropriate method:

use use_with::Use;

struct Resource;

impl Resource {
    fn new() -> Self {
        Resource
    }
}

#[test]
fn it_works() {
    let resource = Resource::new();
    let result = resource.use_with(|res| {
        // Perform operations with `res`, return anything.
        42
    });

    // The resource is now dropped.
    assert_eq!(result, 42);
}

No runtime deps