sails-sol-gen 0.10.3

Solidity contract generator for the Sails framework
Documentation
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^{{pragma_version}};

interface I{{contract_name}} {
    {{#each events}}
    event {{name}}({{#each args}}{{#if @index}}, {{/if}}{{ty}}{{#if indexed}} indexed{{/if}}{{#if name}} {{name}}{{/if}}{{/each}});

    {{/each}}
    {{#each functions}}
    {{#if @index}}

    {{/if}}
    function {{name}}(bool _callReply{{#if args}}, {{#each args}}{{#if @index}}, {{/if}}{{ty}}{{#if mem_location}} {{mem_location}}{{/if}} {{name}}{{/each}}{{/if}}) external{{#if payable}} payable{{/if}} returns (bytes32 messageId);
    {{/each}}
}

contract {{contract_name}}Abi is I{{contract_name}} {
    {{#each functions}}
    {{#if @index}}

    {{/if}}
    function {{name}}(bool _callReply{{#if args}}, {{#each args}}{{#if @index}}, {{/if}}{{ty}}{{#if mem_location}} {{mem_location}}{{/if}} {{name}}{{/each}}{{/if}}) external{{#if payable}} payable{{/if}} returns (bytes32 messageId) {}
    {{/each}}
}

interface I{{contract_name}}Callbacks {
    {{#each functions}}
    function replyOn_{{name}}(bytes32 messageId{{#if reply_type}}, {{reply_type}} reply{{/if}}) external{{#if returns_value}} payable{{/if}};

    {{/each}}
    function onErrorReply(bytes32 messageId, bytes calldata payload, bytes4 replyCode) external payable;
}

contract {{contract_name}}Caller is I{{contract_name}}Callbacks {
    I{{contract_name}} public immutable VARA_ETH_PROGRAM;

    error UnauthorizedCaller();

    constructor(I{{contract_name}} _varaEthProgram) {
        VARA_ETH_PROGRAM = _varaEthProgram;
    }

    modifier onlyVaraEthProgram() {
        _onlyVaraEthProgram();
        _;
    }

    function _onlyVaraEthProgram() internal view {
        if (msg.sender != address(VARA_ETH_PROGRAM)) {
            revert UnauthorizedCaller();
        }
    }

    {{#each functions}}
    function replyOn_{{name}}(bytes32 messageId{{#if reply_type}}, {{reply_type}} reply{{/if}}) external{{#if returns_value}} payable{{/if}} onlyVaraEthProgram {
        // TODO: implement this
    }

    {{/each}}
    function onErrorReply(bytes32 messageId, bytes calldata payload, bytes4 replyCode) external payable onlyVaraEthProgram {
        // TODO: implement this
    }
}