cicd-mel 0.9.2

Mélodium CI/CD library
use fs/file::read
use fs/file::write
use log/logger::Logger
use log/log::logErrors
use log/log::logError
use std/flow::one
use std/text/convert/string::fromUtf8
use std/text/compose::rescale
use std/text/compose::trimEnd
use work/resources::getFileSystem

treatment ioToString()
  input  stdio: Stream<byte>
  output lines: Stream<string>
{
    fromUtf8()
    rescale(delimiter="\n")
    trimEnd()

    Self.stdio -> fromUtf8.encoded,text -> rescale.unscaled,scaled -> trimEnd.text,trimmed -> Self.lines
}

treatment writeFile[logger: Logger](var label: string)
  input filesystem_name: Block<string>
  input file_path: Block<string>
  input data: Stream<byte>
  output finished: Block<void>
  output failed: Block<void>
  output completed: Block<void>
{
    getFileSystem()
    write()

    Self.filesystem_name -> getFileSystem.name,filesystem -> write.filesystem
    Self.file_path ----------------------------------------> write.path
    Self.data ---------------------------------------------> write.data

    logFsErr: logError[logger=logger](label=label)
    logWriteErrs: logErrors[logger=logger](label=label)
    getFileSystem.error -> logFsErr.message
    write.errors --------> logWriteErrs.messages

    oneFailed: one<void>()
    getFileSystem.failed -> oneFailed.a
    write.failed ---------> oneFailed.b

    oneFailedOrFinished: one<void>()
    oneFailed.value -> oneFailedOrFinished.a
    write.finished --> oneFailedOrFinished.b

    write.completed -----------> Self.completed
    oneFailed.value -----------> Self.failed
    oneFailedOrFinished.value -> Self.finished
}

treatment readFile[logger: Logger](var label: string)
  input filesystem_name: Block<string>
  input file_path: Block<string>
  output started: Block<void>
  output finished: Block<void>
  output failed: Block<void>
  output completed: Block<void>
  output data: Stream<byte>
{
    getFileSystem()
    read()

    Self.filesystem_name -> getFileSystem.name,filesystem -> read.filesystem
    Self.file_path ----------------------------------------> read.path

    logFsErr: logError[logger=logger](label=label)
    logReadErrs: logErrors[logger=logger](label=label)
    getFileSystem.error -> logFsErr.message
    read.errors ---------> logReadErrs.messages

    oneFailed: one<void>()
    getFileSystem.failed -> oneFailed.a
    read.failed ----------> oneFailed.b

    oneFailedOrFinished: one<void>()
    oneFailed.value -> oneFailedOrFinished.a
    read.finished ---> oneFailedOrFinished.b

    read.reached --------------> Self.started
    read.completed ------------> Self.completed
    oneFailed.value -----------> Self.failed
    oneFailedOrFinished.value -> Self.finished

    read.data -> Self.data
}