Trivial 1.2.0

Suggested Alternatives

Trivial 6.0.0

Additional Details

Please update to the latest version.

There is a newer version of this package available.
See the version list below for details.
dotnet add package Trivial --version 1.2.0                
NuGet\Install-Package Trivial -Version 1.2.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Trivial" Version="1.2.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Trivial --version 1.2.0                
#r "nuget: Trivial, 1.2.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Trivial as a Cake Addin
#addin nuget:?package=Trivial&version=1.2.0

// Install Trivial as a Cake Tool
#tool nuget:?package=Trivial&version=1.2.0                

Trivial

This library includes utilities and services for tasks, IO, security, etc.

Tasks

using Trivial.Tasks;

Hit task

You can create a task controller to manage when a handler should be raised.

  • HitTask.Debounce: You may request to call a specific action several times in a short time but only the last one should be processed and previous ones should be ignored.
  • HitTask.Throttle: You may want to request to call an action only once in a short time even if you request to call several times.
  • HitTask.Times: You can define an action can be only processed only when request to call in the specific times range and others will be ignored.
  • HitTask.Multiple: A handler to process for the specific times and the state will be reset after a while.

Following is an example for debounce.

// An action you need to process.
Action action = () => {
    // Do something...
};

// Set up when the action can be processed.
var task = HitTask.Debounce(action, TimeSpan.FromMilliseconds(200));

// Somewhere to raise.
task.ProcessAsync();

Retry

You can create a linear retry policy or even a customized to process an action with the specific retry policy. And you can use ObservableTask to observe the state of an action processing.

Mathematics

using Trivial.Maths;

Arithmetic

There a lot of arithmetic functions.

Arithmetic.IsPrime(2147483647); // True
await Arithmetic.IsPrimeAsync(2305843009213693951); // False

Arithmetic.Gcd(192, 128); // 64
Arithmetic.Lcm(192, 128); // 384

Numerals

You can get the number symbols as you want. Following example is for English.

EnglishNumerals.Default.ToString(12345.67);
// twelve thousand three hundred and forty-five point six seven

EnglishNumerals.Default.ToApproximationString(1234567);
// 1.2M

And ChineseNumerals for Chinese and JapaneseNumerals for Japanese.

Angle and polar point

  • Angle Angle.
  • PolarPoint The point in polar coordinates.
  • SphericalPoint The point in spherical coordinates.

Set

  • NullableValueSimpleInterval<T> Interval, such as [20, 100).

Rectangular coordinates

  • OneDimensionalPoint The point in 1D (line) coordinates.
  • TwoDimensionalPoint The point in 2D (flat) coordinates.
  • ThreeDimensionalPoint The point in 3D (stereoscophic) coordinates.
  • FourDimensionalPoint The point in 4D (spacetime) coordinates.

Net

using Trivial.Net;

Contains the helper functions and extension functions for network, such as HTTP web client and its content. And you can also use JsonHttpClient to serialize the JSON format response with retry policy supports. And HttpUri for HTTP URI fields accessing.

Security

using Trivial.Security;

RSA

You can convert a PEM (OpenSSL RSA key) or an XML string to the RSAParametersConvert class.

var parameters = RSAParametersConvert.Parse(pem);

And you can convert back by using the extension method ToPrivatePEMString or ToPublicPEMString. And also you can use the extension method ToXElement to export the XML.

Symmetric

You can encrypt and decrypt a string by symmetric algorithm.

// AES sample.
var original = "Original secret string";
var cipher = SymmetricUtilities.Encrypt(Aes.Create, original, key, iv);
var back = SymmetricUtilities.DecryptText(Aes.Create, cipher, key, iv); // back == original

Hash

For hash algorithm, you can call HashUtilities.ToHashString function to get hash from a plain string and call HashUtilities.Verify to verify.

var original = "The string to hash";

// SHA-512 (of SHA-2 family)
var sha512Str = HashUtilities.ToHashString(SHA512.Create, original);
var isVerified = HashUtilities.Verify(SHA512.Create, original, sha512Str); // --> true

// SHA-3-512
var sha3512Str = HashUtilities.ToHashString(new HashAlgorithmName("SHA3512"), original);
var isVerified3512 = HashUtilities.Verify(sha3512Name, original, sha3512Str); // --> true

Access token

We also provide a set of tools for OAuth including following models.

  • TokenInfo The access token and other properties.
  • AppAccessingKey The app identifier and secret key.
  • OAuthClient The token container with the ability to resolve the access token and create the JSON HTTP web client to access the resources required authentication.

And you can also implement the OAuthBasedClient base class to create your own business HTTP web client factory with OAuth supports.

Secure string utiltiy

You can use the extension methods in the SecureStringExtensions class to convert the secret between SecureString and String/StringBuilder/Byte[].

You can also use the class RSASecretExchange to transfer the secret with RSA encryption.

JWT

You can create a JSON web token to get the string encoded by initializing a new instance of the JsonWebToken class or the JsonWebTokenParser class.

var sign = HashSignatureProvider.CreateHS512("a secret string");
var jwt = new JsonWebToken<Model>(new Model(), sign);
var jwtStr = jwt.ToEncodedString();

// Get authenticiation header value.
var header = jwt.ToAuthenticationHeaderValue();

// Parse.
var jwtSame = JsonWebToken<Model>.Parse(jwtStr, sign); // jwtSame.ToEncodedString() == jwtStr

IO

using Trivial.IO;

Contains the helper functions and extension methods for FileInfo and Stream.

Characters reader

You can read text from a character collection or a number of stream by CharsReader class.

Data

using Trivial.Data;

CSV

You can parse a CSV text by following way.

var csv = new CsvParser("abcd,efg\nhijk,lmn");
foreach (var item in csv)
{
    Console.WriteLine("{0},{1}", item[0], item[1]);
}

If you have a model like following.

class Model
{
    public string A { get; set; }
    public string B { get; set; }
}

Now you can map to the CSV file.

foreach (var model in csv.ConvertTo<Model>(new[] { "A", "B" }))
{
    Console.WriteLine("{0},{1}", model.A, model.B);
}

Data cache collection

You can create a collection to cache data with expiration and count limitation by following way.

var cache = new DataCacheCollection<Model>
{
    MaxCount = 1000,
    Expiration = TimeSpan.FromSeconds(100)
};

So that you can get the data from the cache if has and or add new one if necessary.

if (!cache.TryGet("abcd", out Model item)) item = new Model();

Reflection

using Trivial.Reflection;

Singleton

You can create following class as singleton for different scenarios.

  • SingletonResolver for instances management.
  • SingletonKeeper for async instances management.
  • SingletonRenewTimer contains a timer to renew the instance as needed.

Geography

using Trivial.Geography;

Geolocation

You can use Geolocation, Latitude, Longitude and other models for geolocation information.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages (10)

Showing the top 5 NuGet packages that depend on Trivial:

Package Downloads
Trivial.Console

The console utilities and rich user interface console.

Trivial.WindowsKit

Some advanced visual controls and utilities for Windows app.

NuScien

A core library of NuScien framework which provides a solution to build community and enterprise projects based on resource entity and accessories with ACL and CMS built-in.

Trivial.Chemistry

A library with basic chemical models.

Trivial.Web

A library for web API.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
9.0.0-preview7 89 11/22/2024
9.0.0-preview6 90 11/13/2024
9.0.0-preview5 54 11/1/2024
9.0.0-preview4 41 10/30/2024
9.0.0-preview3 70 10/27/2024
9.0.0-preview2 91 9/8/2024
9.0.0-preview1 126 8/21/2024
8.0.0 1,074 6/12/2024
8.0.0-preview8 143 4/13/2024
8.0.0-preview7 113 3/7/2024
8.0.0-preview6 115 3/6/2024
8.0.0-preview5 98 3/1/2024
8.0.0-preview4 130 2/29/2024
8.0.0-preview3 112 2/28/2024
8.0.0-preview2 111 2/27/2024
8.0.0-preview1 140 2/21/2024
7.2.0 2,644 11/16/2023
7.2.0-preview1 452 8/1/2023
7.1.2 1,373 5/10/2023
7.1.1 430 5/10/2023
7.1.0 594 5/8/2023
7.0.0 1,406 1/20/2023
6.6.0 3,690 11/9/2022
6.5.6 1,299 10/10/2022
6.5.5 644 10/9/2022
6.5.4 1,036 8/10/2022
6.5.0 714 6/17/2022
6.4.0 2,839 4/14/2022
6.3.0 2,020 3/8/2022
6.2.0 4,647 1/30/2022
6.1.0 1,923 1/23/2022
6.0.0 1,462 1/1/2022
5.2.0 4,971 12/15/2021
5.1.1 633 12/3/2021 5.1.1 is deprecated because it is no longer maintained.
5.1.0 1,396 12/2/2021 5.1.0 is deprecated because it is no longer maintained.
5.0.0 1,417 11/27/2021 5.0.0 is deprecated because it is no longer maintained.
4.0.0 1,127 11/9/2021
3.9.0 1,464 12/15/2021
3.8.0 1,266 11/9/2021 3.8.0 is deprecated because it is no longer maintained.
3.7.2 9,474 4/22/2021 3.7.2 is deprecated because it is no longer maintained.
3.7.0 1,646 3/17/2021 3.7.0 is deprecated because it is no longer maintained.
3.6.2 953 3/17/2021 3.6.2 is deprecated because it is no longer maintained.
3.6.0 7,136 11/12/2020 3.6.0 is deprecated because it is no longer maintained.
3.5.2 7,801 4/13/2020 3.5.2 is deprecated because it is no longer maintained.
3.5.1 1,502 4/12/2020 3.5.1 is deprecated because it is no longer maintained.
3.5.0 1,488 4/1/2020 3.5.0 is deprecated because it is no longer maintained.
3.4.3 1,426 3/20/2020 3.4.3 is deprecated because it is no longer maintained.
3.4.2 1,388 3/12/2020 3.4.2 is deprecated because it is no longer maintained.
3.4.1 1,431 2/25/2020 3.4.1 is deprecated because it is no longer maintained.
3.4.0 1,726 2/20/2020 3.4.0 is deprecated because it is no longer maintained.
3.3.0 1,808 2/14/2020 3.3.0 is deprecated because it is no longer maintained.
3.2.0 2,124 1/22/2020 3.2.0 is deprecated because it is no longer maintained.
3.1.0 2,189 12/30/2019 3.1.0 is deprecated because it is no longer maintained.
3.0.1 2,031 12/26/2019 3.0.1 is deprecated because it is no longer maintained.
2.2.0 1,197 2/19/2020 2.2.0 is deprecated because it is no longer maintained.
2.1.0 1,723 12/24/2019 2.1.0 is deprecated because it is no longer maintained.
2.0.3 1,579 12/3/2019 2.0.3 is deprecated because it is no longer maintained.
1.2.0 31,357 5/20/2019 1.2.0 is deprecated because it is no longer maintained.
1.1.0 2,164 5/8/2019 1.1.0 is deprecated because it is no longer maintained.
1.0.0 4,193 5/1/2019 1.0.0 is deprecated because it is no longer maintained.