# `MishkaCmsBuilder.Plugins.ProvisionSnippet`
[🔗](https://github.com/mishka-group/mishka_cms_builder/blob/v0.0.1-alpha.2/lib/mishka_cms_builder/plugins/provision_snippet.ex#L5)

Saves the snippet an extension ships into the editor's Studio list when a site is set up, on
`runtime:provision:snippets` (`MishkaCmsCore.Runtime.ExtensionProvision`, which describes the
payload as `t:MishkaCmsCore.Runtime.ExtensionProvision.snippet_payload/0`).

NOTHING IS EVER UPDATED, as in the rest of a provision: a site that already holds the snippet keeps
its row, edited or not, and the name is not reported.

A REFUSED WRITE COMES BACK AS `error`, never as a raise. A plugin that raises is skipped and the
event answers the payload it was given, so a raise here would read as "nothing to install" and the
admin would never hear that their snippet was refused. The run raises with the reason instead.

It writes for whoever runs the provision, as the pages beside it are written: nobody (the seeds,
the install wizard) writes as the system, a master through the master action with the site named,
and a site admin through their own site's action under its tenant.

# `error_return`

```elixir
@type error_return() ::
  {:error, [%{action: atom(), field: atom(), message: String.t()}]}
```

# `okey_return`

```elixir
@type okey_return() :: {:ok, struct() | map() | module() | [any()]}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `config`

```elixir
@spec config() :: keyword()
```

# `config`

```elixir
@spec config(atom()) :: any()
```

# `enable`

```elixir
@spec enable() :: okey_return() | error_return()
```

# `get`

```elixir
@spec get() :: keyword()
```

# `health_check`

```elixir
@spec health_check() :: :ok | {:degraded, term()} | {:error, term()}
```

Optional. See `c:MishkaInstaller.Event.Hook.health_check/0`. Override to report health.

# `on_dependency_error`

```elixir
@spec on_dependency_error(term()) :: term()
```

Optional. See `c:MishkaInstaller.Event.Hook.on_dependency_error/1`. Override to react.

# `register`

```elixir
@spec register() :: okey_return() | error_return()
```

# `restart`

```elixir
@spec restart() :: okey_return() | error_return()
```

# `start`

```elixir
@spec start() :: okey_return() | error_return()
```

# `start_link`

# `stop`

```elixir
@spec stop() :: okey_return() | error_return()
```

# `unregister`

```elixir
@spec unregister() :: okey_return() | error_return()
```

---

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