Table of Contents

Getting started

Installation

Install the package from NuGet:

dotnet add package Buildi.Primitives

Or add it to your .csproj:

<PackageReference Include="Buildi.Primitives" Version="0.8.0" />

Basic usage

Every type in Buildi.Primitives follows the same API pattern. Here's how to work with any primitive type:

Parsing and validation

using Buildi.Primitives.Organization;

// TryParse — safe parsing, returns bool
if (SwedishOrganizationNumber.TryParse("5592460421", out var orgNumber))
{
    Console.WriteLine(orgNumber.Value);      // "165592460421"
    Console.WriteLine(orgNumber.ToString()); // "559246-0421"
}

// Parse — throws ArgumentException on invalid input
var org = SwedishOrganizationNumber.Parse("5592460421");

// IsValid — quick check without creating an instance
bool valid = SwedishOrganizationNumber.IsValid("5592460421"); // true

Formatting and normalization

All types expose Format and Normalize as static methods:

using Buildi.Primitives.Banking;
using Buildi.Primitives.Contact;

// Format — display-friendly representation
SwedishBankgiroNumber.Format("58056201");    // "5805-6201"
PhoneNumber.Format("0701740633");            // "070-174 06 33"

// Normalize — canonical, machine-comparable form
PhoneNumber.Normalize("070-174 06 33");      // "0046701740633"
EmailAddress.Normalize("User@GMAIL.COM");    // "user@gmail.com"

// IsNormalized — check if already in canonical form
PhoneNumber.IsNormalized("0046701740633");   // true

Both methods accept a fallbackToTrimmedInputWhenInvalid parameter. When true, invalid input returns the trimmed original string instead of null.

Structured validation

Many types provide a Validate() method that explains why an input is invalid:

using Buildi.Primitives.Organization;
using Buildi.Primitives.Validation;

var result = SwedishOrganizationNumber.Validate("123");

if (!result.IsValid)
{
    foreach (var issue in result.Issues)
    {
        Console.WriteLine(issue.Reason);              // e.g. InvalidLength
        Console.WriteLine(issue.EnglishDescription);  // "The input has an invalid length."
        Console.WriteLine(issue.LocalizedDescription); // "Värdet har en ogiltig längd."
    }
}

Text scanning

Extract structured data from unstructured text:

using Buildi.Primitives.TextScanning;

var text = "Kontakta oss på info@example.com eller ring 08-123 456.";
var result = TextScanner.Scan(text);

foreach (var candidate in result.All)
{
    Console.WriteLine($"{candidate.Category}: {candidate.Value} (confidence: {candidate.Confidence})");
}

Next steps