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

Group resource mapper behaviour.

# `group_struct`

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

A domain group struct or map.

# `scim_data`

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

A SCIM group resource as a JSON-decoded map.

# `format_meta`
*optional* 

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

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

# `from_scim`

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

Converts a SCIM JSON map into a domain group struct.

# `get_meta_created`
*optional* 

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

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

# `get_meta_last_modified`
*optional* 

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

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

# `get_meta_version`
*optional* 

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

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

# `to_scim`

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

Converts a domain group struct into a SCIM JSON map.

---

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