defmodule Systemd.TransientUnit do
@moduledoc """
Constructors for systemd transient units.
"""
alias Systemd.TransientUnit.Property
@type property :: Property.t()
@doc """
Creates a typed transient-unit property.
"""
@spec property(String.t(), String.t(), term()) :: Property.t()
defdelegate property(name, signature, value), to: Property, as: :new
@doc """
Creates a string property.
"""
@spec string(String.t(), String.t()) :: Property.t()
def string(name, value), do: property(name, "s", value)
@doc """
Creates a boolean property.
"""
@spec boolean(String.t(), boolean()) :: Property.t()
def boolean(name, value), do: property(name, "b", value)
@doc """
Creates an unsigned 64-bit property.
"""
@spec uint64(String.t(), non_neg_integer()) :: Property.t()
def uint64(name, value), do: property(name, "t", value)
@doc """
Creates a memory limit property such as `MemoryMax`.
"""
@spec memory_max(non_neg_integer()) :: Property.t()
def memory_max(bytes), do: uint64("MemoryMax", bytes)
@doc """
Creates a task-count limit property such as `TasksMax`.
"""
@spec tasks_max(non_neg_integer()) :: Property.t()
def tasks_max(tasks), do: uint64("TasksMax", tasks)
@doc """
Creates a CPU quota property in microseconds per second.
"""
@spec cpu_quota_per_sec_usec(non_neg_integer()) :: Property.t()
def cpu_quota_per_sec_usec(usec), do: uint64("CPUQuotaPerSecUSec", usec)
@doc """
Creates an `ExecStart` property.
"""
@spec exec_start(String.t(), [String.t()], boolean()) :: Property.t()
def exec_start(path, argv, ignore_failure \\ false) do
property("ExecStart", "a(sasb)", [{path, argv, ignore_failure}])
end
end