# `ActorSimulation.GeneratorUtils`
[🔗](https://github.com/d-led/gen_server_virtual_time/blob/v1.1.1/packages/actor_simulation_codegen/lib/actor_simulation/generator_utils.ex#L1)

Shared utilities for code generators.

This module provides common functionality used across all generators
(OMNeT++, CAF, Pony, Phony) to minimize code duplication.

# `extract_messages`

Extracts messages from a send pattern.

## Examples

    iex> GeneratorUtils.extract_messages({:periodic, 100, :tick})
    [:tick]

    iex> GeneratorUtils.extract_messages({:burst, 10, 1000, :batch})
    [:batch]

# `interval_to_nanoseconds`

Converts interval to nanoseconds (for Pony timers).

# `interval_to_seconds`

Converts interval to seconds (for OMNeT++ and other simulators).

# `message_name`

Normalizes a message name to a valid identifier.

# `pattern_interval`

Calculates the interval in milliseconds for a send pattern.

## Examples

    iex> GeneratorUtils.pattern_interval({:periodic, 100, :msg})
    100

    iex> GeneratorUtils.pattern_interval({:rate, 10, :msg})
    100

    iex> GeneratorUtils.pattern_interval({:self_message, 250, :timeout})
    250

# `readme_template`

Generates a basic README template.

# `simulated_actors`

Filters simulated actors from an actors map.

# `to_camel_case`

Converts an atom or string to camelCase.

## Examples

    iex> GeneratorUtils.to_camel_case(:my_actor)
    "myActor"

# `to_pascal_case`

Converts an atom or string to PascalCase.

## Examples

    iex> GeneratorUtils.to_pascal_case(:my_actor)
    "MyActor"

    iex> GeneratorUtils.to_pascal_case("my_actor")
    "MyActor"

# `to_snake_case`

Converts an atom or string to snake_case.

## Examples

    iex> GeneratorUtils.to_snake_case(:my_actor)
    "my_actor"

    iex> GeneratorUtils.to_snake_case("MyActor")
    "my_actor"

# `write_to_directory`

Writes generated files to a directory, creating subdirectories as needed.

---

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