# `WalletPasses.PassData`
[🔗](https://gitlab.com/phinnaeus/wallet_passes/blob/main/lib/wallet_passes/pass_data.ex#L1)

Platform-agnostic representation of wallet pass content.

Contains shared data consumed by both Apple and Google pass builders.
Platform-specific visual configuration lives in `WalletPasses.Apple.Visual`
and `WalletPasses.Google.Visual` (passed separately).

# `field`

```elixir
@type field() :: {key :: String.t(), label :: String.t(), value :: String.t()}
```

# `t`

```elixir
@type t() :: %WalletPasses.PassData{
  auxiliary_fields: [field()],
  back_fields: [field()],
  barcode_alt_text: String.t() | nil,
  barcode_message: String.t() | nil,
  description: String.t() | nil,
  end_date: Date.t() | nil,
  event_name: String.t() | nil,
  header_fields: [field()],
  holder_name: String.t() | nil,
  latitude: float() | nil,
  location_address: String.t() | nil,
  location_name: String.t() | nil,
  longitude: float() | nil,
  nfc_encryption_public_key: String.t() | nil,
  nfc_message: String.t() | nil,
  nfc_requires_authentication: boolean() | nil,
  organization_name: String.t() | nil,
  pass_type: WalletPasses.PassType.t(),
  primary_fields: [field()],
  secondary_fields: [field()],
  serial_number: String.t(),
  start_date: Date.t() | nil,
  timezone: String.t() | nil,
  transit_type: :air | :boat | :bus | :train | :generic | nil
}
```

# `barcode_value`

Returns the barcode message, falling back to serial_number if not set.

# `format_date_range`

Formats start_date..end_date as a human-readable range.

# `new`

Creates a new PassData struct from keyword options.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
