sim 0.13.1

Sim is a discrete event simulation package that facilitates Rust- and npm-based simulation products and projects
Documentation
[
    {
        "event_expression": "new",
        "event_parameters": [
            "job_in_port",
            "job_out_port",
            "max_batch_time",
            "max_batch_size",
            "store_records"
        ],
        "event_routine": {
            "state_transitions": [],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "add_to_batch",
        "event_parameters": [
            "incoming_message",
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Batching"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "start_batch",
        "event_parameters": [
            "incoming_message",
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Batching"
                ],
                [
                    "self.state.until_next_event",
                    "self.max_batch_time"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "fill_batch",
        "event_parameters": [
            "incoming_message",
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Release"
                ],
                [
                    "self.state.until_next_event",
                    "0.0"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "release_full_queue",
        "event_parameters": [
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Passive"
                ],
                [
                    "self.state.until_next_event",
                    "INFINITY"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "release_partial_queue",
        "event_parameters": [
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Batching"
                ],
                [
                    "self.state.until_next_event",
                    "self.max_batch_time"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "release_multiple",
        "event_parameters": [
            "services"
        ],
        "event_routine": {
            "state_transitions": [
                [
                    "self.state.phase",
                    "Phase :: Release"
                ],
                [
                    "self.state.until_next_event",
                    "0.0"
                ]
            ],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "record",
        "event_parameters": [
            "time",
            "action",
            "subject"
        ],
        "event_routine": {
            "state_transitions": [],
            "scheduling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": "\\sigma"
                }
            ],
            "cancelling": []
        }
    },
    {
        "event_expression": "events_ext",
        "event_parameters": [
            "incoming_message",
            "services"
        ],
        "event_routine": {
            "state_transitions": [],
            "scheduling": [
                {
                    "event_expression_target": "add_to_batch",
                    "parameters": [],
                    "condition": "(& self.state.phase, self.state.jobs.len() + 1 < self.max_batch_size,) = (Phase :: Batching, true)",
                    "delay": null
                },
                {
                    "event_expression_target": "start_batch",
                    "parameters": [],
                    "condition": "(& self.state.phase, self.state.jobs.len() + 1 < self.max_batch_size,) = (Phase :: Passive, true)",
                    "delay": null
                },
                {
                    "event_expression_target": "fill_batch",
                    "parameters": [],
                    "condition": "(& self.state.phase, self.state.jobs.len() + 1 < self.max_batch_size,) = (_, false)",
                    "delay": null
                }
            ],
            "cancelling": [
                {
                    "event_expression_target": "events_int",
                    "parameters": [],
                    "condition": null,
                    "delay": null
                }
            ]
        }
    },
    {
        "event_expression": "events_int",
        "event_parameters": [
            "services"
        ],
        "event_routine": {
            "state_transitions": [],
            "scheduling": [
                {
                    "event_expression_target": "release_full_queue",
                    "parameters": [],
                    "condition": "(self.state.jobs.len() <= self.max_batch_size, self.state.jobs.len() >= 2 *\n self.max_batch_size,) = (true, false)",
                    "delay": null
                },
                {
                    "event_expression_target": "release_multiple",
                    "parameters": [],
                    "condition": "(self.state.jobs.len() <= self.max_batch_size, self.state.jobs.len() >= 2 *\n self.max_batch_size,) = (false, true)",
                    "delay": null
                },
                {
                    "event_expression_target": "release_partial_queue",
                    "parameters": [],
                    "condition": "(self.state.jobs.len() <= self.max_batch_size, self.state.jobs.len() >= 2 *\n self.max_batch_size,) = (false, false)",
                    "delay": null
                }
            ],
            "cancelling": []
        }
    }
]