# gs-std

[GS Open Source](https://garrity.co/oss.html) |
[License (Apache 2.0)](./LICENSE)

Garrity Software standard types and operations with minimal dependencies.

- [Usage](#usage)
- [Core Module](#core-module)
- [I/O Module](#io-module)
- [Effect Module](#effect-module)

## Usage

This artifact is available in the Garrity Software Maven repository.

```scala
externalResolvers +=
  "Garrity Software Releases" at "https://maven.garrity.co/releases"

// No Dependencies
val GsStdCore: ModuleID =
  "gs" %% "gs-std-core-v0" % "$VERSION"

// Depends on Cats Effect and Fs2
val GsStdIO: ModuleID =
  "gs" %% "gs-std-io-v0" % "$VERSION"

// Depends on Cats Effect and Fs2
val GsStdEffect: ModuleID =
  "gs" %% "gs-std-effect-v0" % "$VERSION"
```

## Core Module

Provides standard types, wrappers, and tools.

- Common semantic types (e.g. `CreatedAt`).
- Encoding and representing encoded data.
- Hashing algorithms and representing hashes.
- Reasoning about bytes and blobs.

## I/O Module

### File Helpers

`Files`: These provide support for reading and writing files. Provides wrapping
around `java.nio.file.Files`.

Note that for streaming operations, `fs2.io` provides everything conveniently
and does not benefit from wrapping.

### Resource Helpers

These provide support for reading files from packaged resource directories
(e.g. `src/main/resources`).

## Effect Module

This module relies on the [Core Module](#core-module) and takes advantage of the
types defined therein.

### Random Numbers

`Rng[F[_]]`: Effectful random number generator with creation/testing
helpers.

### Dates and Times

`DateTimeProvider[F[_]]`: Effectful provider for dates and times. Provides an
implementation based on clock injection. Helps to decouple date/time use from
static methods.
