# `ExScim.Users.Mapper.Adapter`
[🔗](https://github.com/ExScim/ex_scim/blob/main/lib/ex_scim/users/mapper/adapter.ex#L1)

User resource mapper behaviour.

# `scim_data`

```elixir
@type scim_data() :: map()
```

A SCIM user resource as a JSON-decoded map.

# `user_struct`

```elixir
@type user_struct() :: struct() | map()
```

A domain user struct or map.

# `format_meta`
*optional* 

```elixir
@callback format_meta(
  user_struct(),
  keyword()
) :: map()
```

Builds the complete SCIM `meta` object for a user. Receives the struct and options like `:location` and `:resource_type`.

# `from_scim`

```elixir
@callback from_scim(scim_data(), ExScim.Scope.t()) ::
  {:ok, user_struct()} | {:error, atom() | term()}
```

Converts a SCIM JSON map into a domain user struct.

# `get_meta_created`
*optional* 

```elixir
@callback get_meta_created(user_struct()) :: DateTime.t() | nil
```

Extracts the creation timestamp from a user struct. Used for SCIM `meta.created`.

# `get_meta_last_modified`
*optional* 

```elixir
@callback get_meta_last_modified(user_struct()) :: DateTime.t() | nil
```

Extracts the last-modified timestamp from a user struct. Used for SCIM `meta.lastModified`.

# `get_meta_version`
*optional* 

```elixir
@callback get_meta_version(user_struct()) :: String.t() | nil
```

Computes an ETag version string from a user struct. Used for SCIM `meta.version`.

# `to_scim`

```elixir
@callback to_scim(user_struct(), ExScim.Scope.t(), keyword()) ::
  {:ok, scim_data()} | {:error, atom() | term()}
```

Converts a domain user struct into a SCIM JSON map.

---

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