---
name: "diameter_make"
section: "3erl"
platform: "linux"
package: "erlang-manpages"
version: "1:25.2.3+dfsg-1+deb12u4"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/diameter_make"
---

# diameter\_make(3erl)

Diameter dictionary compilation.

## NAME

diameter\_make - Diameter dictionary compilation.

## DESCRIPTION

The function codec/2 is used to compile a diameter dictionary file into Erlang source. The resulting source implements the interface diameter requires to encode and decode the dictionary's messages and AVPs.

The utility [diameterc(1)](/diameterc/1.md) provides an alternate compilation interface.

## EXPORTS

**codec(File :: iolist() \| binary(), \[Opt\]) -\> ok \| {ok, \[Out\]} \| {error, Reason}**\

Compile a single dictionary file. The input *File* can be either a path or a literal dictionary, the occurrence of newline (ascii NL) or carriage return (ascii CR) identifying the latter. *Opt* determines the format of the results and whether they are written to file or returned, and can have the following types.

- ***parse \| forms \| erl \| hrl*:**

  Specifies an output format. Whether the output is returned or written to file depends on whether or not option *return* is specified. When written to file, the resulting file(s) will have extensions *.D*, *.F*, *.erl*, and *.hrl* respectively, basenames defaulting to *dictionary* if the input dictionary is literal and does not specify *@name*. When returned, results are in the order of the corresponding format options. Format options default to *erl* and *hrl* (in this order) if unspecified.

  The *parse* format is an internal representation that can be passed to flatten/1 and format/1, while the *forms* format can be passed to compile:forms/2. The *erl* and *hrl* formats are returned as iolists.

- ***{include, string()}*:**

  Prepend the specified directory to the code path. Use to point at beam files compiled from inherited dictionaries, *@inherits* in a dictionary file creating a beam dependency, not an erl/hrl dependency.

  Multiple *include* options can be specified.

- ***{outdir, string()}*:**

  Write generated source to the specified directory. Defaults to the current working directory. Has no effect if option *return* is specified.

- ***return*:**

  Return results in a *{ok, \[Out\]}* tuple instead of writing to file and returning *ok*.

- ***{name\|prefix, string()}*:**

  Transform the input dictionary before compilation, setting *@name* or *@prefix* to the specified string.

- ***{inherits, string()}*:**

  Transform the input dictionary before compilation, appending *@inherits* of the specified string.

  Two forms have special meaning:

```
{inherits, "-"}
{inherits, "Prev/Mod"}
```

The first has the effect of clearing any previous inherits, the second of replacing a previous inherits of *Prev* to one of *Mod*. This allows the semantics of the input dictionary to be changed without modifying the file itself.

Multiple *inherits* options can be specified.

Note that a dictionary's *@name*, together with the *outdir* option, determine the output paths when the *return* option is not specified. The *@name* of a literal input dictionary defaults to *dictionary*.

A returned error reason can be converted into a readable string using format\_error/1.

**format(Parsed) -\> iolist()**\

Turns a parsed dictionary, as returned by codec/2, back into the dictionary format.

**flatten(Parsed) -\> term()**\

Reconstitute a parsed dictionary, as returned by codec/2, without using *@inherits*. That is, construct an equivalent dictionary in which all AVP's are definined in the dictionary itself. The return value is also a parsed dictionary.

**format\_error(Reason) -\> string()**\

Turn an error reason returned by codec/2 into a readable string.

## BUGS

Unrecognized options are silently ignored.

## SEE ALSO

[diameterc(1)](/diameterc/1.md), [diameter\_dict(5)](/diameter_dict/5.md)
