DataBin - uniform data model for raw attachment data stream storage

H.Necessaire provides a uniform data model for raw data stream attachments like documents, images, zip archives, etc.

DataBin - uniform data model for raw attachment data stream storage
Photo by Michael Dziedzic / Unsplash
dotnet add package H.Necessaire

H.Necessaire

Storing raw data stream, such as email attachments, documents, images, zip archives, etc. is an extremely often scenario in any project. H.Necessaire comes with data models and operations for such scenarios so that it's uniform across modules and projects. And it's called a DataBin.

DataBin Models

class DataBinMeta : IGuidIdentity
{
  Guid ID
  string Name
  string Description
  DateTime AsOf
  DataBinFormatInfo Format
  Note[] Notes
}

class DataBin : DataBinMeta
{
  virtual async Task<ImADataBinStream> OpenDataBinStream()
}

interface ImADataBinStream : IDisposable
{
  Stream DataStream
}

class DataBinFormatInfo : IStringIdentity
{
  string ID
  string Extension
  string MimeType
  string Encoding
}

Data Bin uniform models

DataBin construction help extensions

//Construct the DataBin from DataBinMeta
static DataBin ToBin(this DataBinMeta dataBinMeta, Func<DataBinMeta, Task<ImADataBinStream>> streamFactory)

//Construct ImADataBinStream from Stream
static ImADataBinStream ToDataBinStream(this Stream stream, params IDisposable[] otherDisposables)

View full models on GitHub:

H.Necessaire/Src/H.Necessaire/H.Necessaire/Models/DataBin.cs at master · hinteadan/H.Necessaire
A collection of useful data and execution extensions for .NET - hinteadan/H.Necessaire

Usage

//Define meta data
DataBinMeta attachmentMeta = new()
{
    Name = "attachment.png",
    Format = new DataBinFormatInfo
    {
        ID = "ImagePng",
        Extension = "png",
        MimeType = "image/png",
        Encoding = null,
    },
};

//Define data acquisition
H.Necessaire.DataBin attachment
    = attachmentMeta
    .ToBin(
        x => x.Name.OpenEmbeddedResource().ToDataBinStream().AsTask()
    );

//Use it
using (ImADataBinStream data = await attachment.OpenDataBinStream())
{
    Console.WriteLine(await data.DataStream.ReadAsStringAsync());
}

Sample on GitHub Samples Repo

H.Necessaire.Usage.Samples/Src/H.Necessaire.Samples/H.Necessaire.Samples.DataBin/Program.cs at master · hinteadan/H.Necessaire.Usage.Samples
Usage Samples for H.Necessaire Docs WebSite. Contribute to hinteadan/H.Necessaire.Usage.Samples development by creating an account on GitHub.