filess 0.6.2

Simplified file management
Documentation

Filess

Simplify file management with file primitives.

Use filess as you would use String or Vec.

Each file format is now a separate type, if your function needs json, you can put filess::Json as a filed, enforcing the proper path.

Filess simplifies saving and loading of data, with serde, image and symphonia optional integration.

let file1: Json = Json::new("path/to/file.json");   // Create new Json file. Filess will ensure that it's a valid path
let data: Vec<u8> = file1.load()?;                  // Load data from a file
let model = file1.load_model::<YourModel>()?;       // `Serde` integration: load model from the file
let model: YourModel = file1.load_model()?;         // Or like this
file1.save(&data)?;                                 // Save anything with `impl AsRef<[u8]>`
file1.save_model(&model)?;                          // `Serde` integration: save a model into file

let file2: Jpeg = Temporary::new(Jpeg::new("path/to/image.jpeg")); // Temporary file will be deleted together with it's empty parent dirs at `drop()`
let image: DynamicImage = file2.load_image()?;      // `Image` integration: load image of jpeg format from file
file2.save_image(&image)?;                          // `Image` integration: save `DynamicImage` with default compression parameters
// `Image` integration: save `DynamicImage` with custom quality parameters (only available if supports quality settings)
file2.save_image_custom(&image, JpegConfig { quality: 40 })?;

let file3 = Ogg::new("path/to/audio.ogg");          // `Symphonia` integration
let audio: DecodedStream<OggReader, DynamicDecoder> // DecodedStream gives you everything you need for use with `symphonia` and is served as source for `rodio`
    = file3.load_audio()?;                          // Saving is not support (yet). You can still use `file3.save(&data)` if you have compressed audio

let some_image = ImageType::new("path/to/image.webp"); // `File`, `Text`, `Model`, `Image` and `Audio` Types abstract away exact file types without overhead ov `Box<dyn>`
let img = some_image.load_image()?;
some_image.save_image(&img)?;

// Each function have their async variants (prefixed with `a`) if `async` feature is on
let image2 = file2.aload_image().await?;
Jpeg::new("another/path/image.jpeg").asave_image(&image2).await?;

// Enforce that file given should be able to save/load `serde` models. `ModelType` can also be passed
fn needs_model(file: impl filess::traits::ModelFile);

Features

Feature Description
all-files (Default) All currently supported files, includes all-text, all-images and all-audio
all-text All currently supported text files: Json, Toml, Md, Txt
all-images All currently supported image files: Jpeg, Png, WebP, Avif, Tiff, Gif, Bmp, Exr, Ff, Hdr, Ico, Pnm, Qoi, Tga
all-audio All currently supported audio files: Ogg, Mkv, Wav, Flac, Mp4, Mp3, Mp2, Mp1, Mpa, Alac
serde Serde integration, adds save_model and load_model for Json and Toml. Use serde_json and serde_toml to activate integrations for specific files (due to limitations of cargo)
image Image integration, adds save_image and load_image to all image formats, and save_image_custom to formats where image supports custom quality
image-nasm Turns on nasm feature of image
audio Symphonia integration, adds load_audio to all audio formats. Due to audio being complicated, DecodedStream is returned, which contains reader, decoder, track_id and helper methods
symphonia-simd Turns on opt-simd feature of symphonia
rodio Adds minimal rodio integration, allowing DecodedStream to be directly passed as source
async Add async versions of all methods. Uses minimal tokio for fs. Adds asave_image_custom_offload to offload image encoding
rayon (Default) Turns on all of rayon features in crates that support it
open (Default) Adds open integration. You can open files or directories in default or arbitrary programs (open, open_with, etc.)

All files have their separate features. It is recommended to turn off default features and add only formats you use, if you wish to publish.