defmodule Fluent.Native do
@moduledoc """
Module
"""
use Rustler, otp_app: :libfluent, crate: :fluent_native
@doc """
Initializes Fluent native bundle for given `locale`, and returns reference to it on succeded initialization.
Available options:
* `use_isolating` - if set to **false**, removes isolation for messages. Can be used in specific environments to prevent unnesessary identation.
Must be set to **true** in for right-to-left locale usages.
## Examples:
iex> init("en")
{:ok, #Reference<...>}
"""
@spec init(locale :: Fluent.locale(), opts :: Keyword.t()) ::
{:ok, Fluent.bundle()} | no_return()
def init(_locale, _opts \\ []), do: error()
@doc """
Adds new FTL `resource` for existing `bundle`.
Resource **mast be** valid FTL source. The function can returns `:ok` if `resource` is valid,
and does not return `bundle` reference again, becuse data under the reference is mutable.
## Examples:
iex> {:ok, bundle} = init("en")
{:ok, #Reference<...>}
iex> with_resource(bundle, "key = Translation")
:ok
"""
@spec with_resource(bundle :: Fluent.bundle(), resource :: String.t()) ::
:ok | {:error, :bad_resource} | no_return()
def with_resource(_bundle, _resource), do: error()
@doc """
Performs localization for given `message` with given `bundle`.
Returns `ok` tuple if message is succeeded
Potentially can crash in the `bundle` that is given not match.
"""
@spec format_pattern(bundle :: Fluent.bundle(), message :: String.t(), args :: Keyword.t()) ::
{:ok, String.t()} | {:error, :bad_msg} | no_return()
def format_pattern(_bundle, _message, _args), do: error()
@spec assert_locale(locale :: Fluent.locale()) :: :ok | {:error, any} | no_return
def assert_locale(locale) when is_binary(locale), do: error()
defp error, do: :erlang.nif_error(:nif_not_loaded)
end