Skip to main content

src/sendr.gleam

//// Sendr - An email library for Gleam

import sendr/message/attachment.{type Attachment}
import sendr/message/mailbox.{type Mailbox}

/// Represents the fields of an email message that can be validated.
pub type Field {
  From
  ReplyTo
  To
  Cc
  Bcc
  Subject
}

/// Errors related to attachment fields during validation.
pub type AttachmentField {
  RequiredFilenameMissing
  RequiredContentIdMissing
  AttachmentTypeNotSupported
}

/// Errors related to the message body during validation.
pub type BodyField {
  NoBody
  TextToShort(minimum: Int, length: Int)
  HtmlToShort(minimum: Int, length: Int)
}

/// The top-level error type for a Sendr backend.
///
/// `error` is the backend-specific error type (e.g. connection or API errors).
/// Validation errors use the other variants directly; backend errors are
/// wrapped in `BackendError`.
pub type SendrError(error) {
  RequiredFieldMissing(field: Field)
  FieldExceedsMaximumLength(field: Field, maximum: Int, length: Int)
  TooManyEntries(field: Field)
  NoRecipients
  InvalidMailbox(field: Field, mailbox: Mailbox)
  InvalidAttachment(field: AttachmentField, attachment: Attachment)
  InvalidBody(BodyField)
  BackendError(error)
}