defmodule MailParser do
@moduledoc """
NIF binding of mail_parser using Rustler.
"""
mix_config = Mix.Project.config()
version = mix_config[:version]
github_url = mix_config[:package][:links]["GitHub"]
targets = ~w(
aarch64-apple-darwin
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
arm-unknown-linux-gnueabihf
x86_64-apple-darwin
x86_64-pc-windows-gnu
x86_64-pc-windows-msvc
x86_64-unknown-linux-gnu
x86_64-unknown-linux-musl
)
mode =
case Mix.env() do
env when env in [:prod, :bench] -> :release
_env -> :debug
end
use RustlerPrecompiled,
otp_app: :mail_parser,
crate: :mail_parser_nif,
mode: mode,
base_url: "#{github_url}/releases/download/v#{version}",
force_build: System.get_env("FORCE_BUILD") in ["1", "true"],
version: version,
targets: targets
alias __MODULE__.Attachment
@doc """
Parses a string containing a RFC5322 raw message and extracts all nested
attachments.
A best-effort is made to parse the message and if no headers are found
`:error` is returned.
### Example
iex> MailParser.extract_nested_attachments(raw_message)
{:ok, [%MailParser.Attachment{name: "example.pdf", content_type: "application/pdf", content_bytes: "..."}]}
"""
@spec extract_nested_attachments(String.t()) :: {:ok, [Attachment.t()]} | :error
def extract_nested_attachments(_raw_message), do: :erlang.nif_error(:nif_not_loaded)
end