Practikal.Base 0.2.1

Functional (base) library for web applications.

The owner has unlisted this package. This could mean that the package is deprecated or shouldn't be used anymore.
Install-Package Practikal.Base -Version 0.2.1
dotnet add package Practikal.Base --version 0.2.1
<PackageReference Include="Practikal.Base" Version="0.2.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Practikal.Base --version 0.2.1
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Build Status
NuGet
Coverage Status
License: MIT

Practikal.Base

Functional library which contains a useful set of functions for building small-size/mid-size web applications.

Goals

The library is built targeting some goals:

  • provide essential functions for building modern web applications.
  • 0 dependencies - 3rd party framework and library agnostic excepting Newtonsoft.Json.
  • functions are written following functional programming principles (immutability - immutable states, purity - pure functions, composability - partial-applications, high-order functions).
  • each module is completely independent and does not refer any other library module.
  • functions should be as simple as possible.
  • FP on/off OOP.

Description

The library contains functions for:

  • exceptions handling.
  • serializing data.
  • validating data.
  • identities handling.
  • resiliency retries and timeout.

Install

dotnet add package Practikal.Base

Exceptions handling

Functions for:

  • getting user message.
  • getting technical message.
open System
open Practikal

getUserMessage(new Exception('user:message'))  // output: message
getUserMessage(new Exception('message'))  // output: System failure.
getTechnicalMessage(new Exception('message'))  // output: message
getTechnicalMessage(new Exception('user:message'))  // output: user:message

Serialization

Functions for:

  • serializing data.
  • deserializing data;
open Practikal

    type Record = {
        Field1: string;
        Field2: int;
    }

    Some { Field1 = "abc"; Field2 = 123 }
    |> serialize 
    |> deserialize<Record>

    // output: Some { Field1 = "abc"; Field2 = 123; }

Validation

Functions for:

  • validating data.
open Practikal
open System.ComponentModel.DataAnnotations

    type Validation = {
        [<Required>] Field1: string;
        [<Required>] Field2: string;
    }

    validate { Field1 = input1; Field2 = input2 }
    // output: Success { Field1 = input1; Field2 = input2; }

    validate { Field1 = null; Field2 = input2 }
    // output: Failure "user:The Field1 field is required."

Identity

Functions for:

  • set current principal.
  • get current principal.
  • set user id, user name, full name, role, authentication type for principal.
  • get user id, user name, full name, is in role, is authenticated for current principal.
open Practikal

    { UserId = 0; UserName = ""; FullName = ""; Role = ""; AuthenticationType = "" }
    |> setUserId 123
    |> setUserName "username"
    |> setFullName "fullname"
    |> setRole "role"
    |> setAuthenticationType "authtype"
    |> setCurrentPrincipal

    getUserId()  // output: 123
    getUserName()  // output: "username"
    getFullName()  // output: "fullname"
    isInRole("role")  // output: true
    isAuthenticated()  // output: true 

Resiliency

Functions:

  • different retry strategies functions (fixed, incremental, exponential, random).
  • timeout function.

Using retry strategies:

open Practikal

    // when failure retry 3 times at 1000 ms interval
    (retryFixed (fun () -> "test") 1000 3).Result // output: Success "test"

    // when failure retry at 1000ms, 2000ms and 3000ms intervals
    (retryIncremental (fun () -> "test") 1000 3).Result // output: Success "test"

    // when failure retry at 2000ms, 4000ms, 8000ms, 16000ms intervals
    (retryExponential (fun () -> "test") 1000 4).Result // output: Success "test"

    // when failure retry randomly betwwen first time 0-5000ms, second time 0-5000ms
    (retryRandom (fun () -> "test") 5000 2).Result // output: Success "test"

Using timeout:

open Practikal

    // without timeout 
    (timeout (fun () -> "test") 1000).Result // output: Success "test"

    // with timeout
    (timeout (fun () -> task { do! Task.Delay 10 }) 5).Result // output: Failure "Timeout."

Build Status
NuGet
Coverage Status
License: MIT

Practikal.Base

Functional library which contains a useful set of functions for building small-size/mid-size web applications.

Goals

The library is built targeting some goals:

  • provide essential functions for building modern web applications.
  • 0 dependencies - 3rd party framework and library agnostic excepting Newtonsoft.Json.
  • functions are written following functional programming principles (immutability - immutable states, purity - pure functions, composability - partial-applications, high-order functions).
  • each module is completely independent and does not refer any other library module.
  • functions should be as simple as possible.
  • FP on/off OOP.

Description

The library contains functions for:

  • exceptions handling.
  • serializing data.
  • validating data.
  • identities handling.
  • resiliency retries and timeout.

Install

dotnet add package Practikal.Base

Exceptions handling

Functions for:

  • getting user message.
  • getting technical message.
open System
open Practikal

getUserMessage(new Exception('user:message'))  // output: message
getUserMessage(new Exception('message'))  // output: System failure.
getTechnicalMessage(new Exception('message'))  // output: message
getTechnicalMessage(new Exception('user:message'))  // output: user:message

Serialization

Functions for:

  • serializing data.
  • deserializing data;
open Practikal

    type Record = {
        Field1: string;
        Field2: int;
    }

    Some { Field1 = "abc"; Field2 = 123 }
    |> serialize 
    |> deserialize<Record>

    // output: Some { Field1 = "abc"; Field2 = 123; }

Validation

Functions for:

  • validating data.
open Practikal
open System.ComponentModel.DataAnnotations

    type Validation = {
        [<Required>] Field1: string;
        [<Required>] Field2: string;
    }

    validate { Field1 = input1; Field2 = input2 }
    // output: Success { Field1 = input1; Field2 = input2; }

    validate { Field1 = null; Field2 = input2 }
    // output: Failure "user:The Field1 field is required."

Identity

Functions for:

  • set current principal.
  • get current principal.
  • set user id, user name, full name, role, authentication type for principal.
  • get user id, user name, full name, is in role, is authenticated for current principal.
open Practikal

    { UserId = 0; UserName = ""; FullName = ""; Role = ""; AuthenticationType = "" }
    |> setUserId 123
    |> setUserName "username"
    |> setFullName "fullname"
    |> setRole "role"
    |> setAuthenticationType "authtype"
    |> setCurrentPrincipal

    getUserId()  // output: 123
    getUserName()  // output: "username"
    getFullName()  // output: "fullname"
    isInRole("role")  // output: true
    isAuthenticated()  // output: true 

Resiliency

Functions:

  • different retry strategies functions (fixed, incremental, exponential, random).
  • timeout function.

Using retry strategies:

open Practikal

    // when failure retry 3 times at 1000 ms interval
    (retryFixed (fun () -> "test") 1000 3).Result // output: Success "test"

    // when failure retry at 1000ms, 2000ms and 3000ms intervals
    (retryIncremental (fun () -> "test") 1000 3).Result // output: Success "test"

    // when failure retry at 2000ms, 4000ms, 8000ms, 16000ms intervals
    (retryExponential (fun () -> "test") 1000 4).Result // output: Success "test"

    // when failure retry randomly betwwen first time 0-5000ms, second time 0-5000ms
    (retryRandom (fun () -> "test") 5000 2).Result // output: Success "test"

Using timeout:

open Practikal

    // without timeout 
    (timeout (fun () -> "test") 1000).Result // output: Success "test"

    // with timeout
    (timeout (fun () -> task { do! Task.Delay 10 }) 5).Result // output: Failure "Timeout."

This package is not used by any popular GitHub repositories.

Version History

Version Downloads Last updated