# `LatticeStripe.BillingPortal.Configuration.Features`
[🔗](https://github.com/szTheory/lattice_stripe/blob/v2.3.0/lib/lattice_stripe/billing_portal/configuration/features.ex#L1)

The `features` sub-object on a `LatticeStripe.BillingPortal.Configuration`.

Dispatches each feature key to a typed sub-struct via `from_map/1`, except
`invoice_history` which is kept as a raw `map() | nil`. The `invoice_history`
object contains only a single boolean (`enabled`) and does not warrant a
dedicated module per D-01.

## Children

- `customer_update` → `LatticeStripe.BillingPortal.Configuration.Features.CustomerUpdate`
- `invoice_history` → raw `map() | nil`
- `payment_method_update` → `LatticeStripe.BillingPortal.Configuration.Features.PaymentMethodUpdate`
- `subscription_cancel` → `LatticeStripe.BillingPortal.Configuration.Features.SubscriptionCancel`
- `subscription_update` → `LatticeStripe.BillingPortal.Configuration.Features.SubscriptionUpdate`

Parent struct: `LatticeStripe.BillingPortal.Configuration`.

# `t`

```elixir
@type t() :: %LatticeStripe.BillingPortal.Configuration.Features{
  customer_update:
    LatticeStripe.BillingPortal.Configuration.Features.CustomerUpdate.t() | nil,
  extra: map(),
  invoice_history: map() | nil,
  payment_method_update:
    LatticeStripe.BillingPortal.Configuration.Features.PaymentMethodUpdate.t()
    | nil,
  subscription_cancel:
    LatticeStripe.BillingPortal.Configuration.Features.SubscriptionCancel.t()
    | nil,
  subscription_update:
    LatticeStripe.BillingPortal.Configuration.Features.SubscriptionUpdate.t()
    | nil
}
```

# `from_map`

```elixir
@spec from_map(map() | nil) :: t() | nil
```

---

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