// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.Routeros.Ip
{
    public static class GetFirewall
    {
        /// <summary>
        /// ## # routeros.Ip.getFirewall (Data Source)
        /// 
        /// This datasource contains all supported firewall resources:
        /// - address_list
        /// - nat
        /// - mangle
        /// - rules (aka filter)
        /// </summary>
        public static Task<GetFirewallResult> InvokeAsync(GetFirewallArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.InvokeAsync<GetFirewallResult>("routeros:Ip/getFirewall:getFirewall", args ?? new GetFirewallArgs(), options.WithDefaults());

        /// <summary>
        /// ## # routeros.Ip.getFirewall (Data Source)
        /// 
        /// This datasource contains all supported firewall resources:
        /// - address_list
        /// - nat
        /// - mangle
        /// - rules (aka filter)
        /// </summary>
        public static Output<GetFirewallResult> Invoke(GetFirewallInvokeArgs? args = null, InvokeOptions? options = null)
            => global::Pulumi.Deployment.Instance.Invoke<GetFirewallResult>("routeros:Ip/getFirewall:getFirewall", args ?? new GetFirewallInvokeArgs(), options.WithDefaults());
    }


    public sealed class GetFirewallArgs : global::Pulumi.InvokeArgs
    {
        [Input("addressLists")]
        private List<Inputs.GetFirewallAddressListArgs>? _addressLists;
        public List<Inputs.GetFirewallAddressListArgs> AddressLists
        {
            get => _addressLists ?? (_addressLists = new List<Inputs.GetFirewallAddressListArgs>());
            set => _addressLists = value;
        }

        [Input("mangles")]
        private List<Inputs.GetFirewallMangleArgs>? _mangles;
        public List<Inputs.GetFirewallMangleArgs> Mangles
        {
            get => _mangles ?? (_mangles = new List<Inputs.GetFirewallMangleArgs>());
            set => _mangles = value;
        }

        [Input("nats")]
        private List<Inputs.GetFirewallNatArgs>? _nats;
        public List<Inputs.GetFirewallNatArgs> Nats
        {
            get => _nats ?? (_nats = new List<Inputs.GetFirewallNatArgs>());
            set => _nats = value;
        }

        [Input("rules")]
        private List<Inputs.GetFirewallRuleArgs>? _rules;
        public List<Inputs.GetFirewallRuleArgs> Rules
        {
            get => _rules ?? (_rules = new List<Inputs.GetFirewallRuleArgs>());
            set => _rules = value;
        }

        public GetFirewallArgs()
        {
        }
        public static new GetFirewallArgs Empty => new GetFirewallArgs();
    }

    public sealed class GetFirewallInvokeArgs : global::Pulumi.InvokeArgs
    {
        [Input("addressLists")]
        private InputList<Inputs.GetFirewallAddressListInputArgs>? _addressLists;
        public InputList<Inputs.GetFirewallAddressListInputArgs> AddressLists
        {
            get => _addressLists ?? (_addressLists = new InputList<Inputs.GetFirewallAddressListInputArgs>());
            set => _addressLists = value;
        }

        [Input("mangles")]
        private InputList<Inputs.GetFirewallMangleInputArgs>? _mangles;
        public InputList<Inputs.GetFirewallMangleInputArgs> Mangles
        {
            get => _mangles ?? (_mangles = new InputList<Inputs.GetFirewallMangleInputArgs>());
            set => _mangles = value;
        }

        [Input("nats")]
        private InputList<Inputs.GetFirewallNatInputArgs>? _nats;
        public InputList<Inputs.GetFirewallNatInputArgs> Nats
        {
            get => _nats ?? (_nats = new InputList<Inputs.GetFirewallNatInputArgs>());
            set => _nats = value;
        }

        [Input("rules")]
        private InputList<Inputs.GetFirewallRuleInputArgs>? _rules;
        public InputList<Inputs.GetFirewallRuleInputArgs> Rules
        {
            get => _rules ?? (_rules = new InputList<Inputs.GetFirewallRuleInputArgs>());
            set => _rules = value;
        }

        public GetFirewallInvokeArgs()
        {
        }
        public static new GetFirewallInvokeArgs Empty => new GetFirewallInvokeArgs();
    }


    [OutputType]
    public sealed class GetFirewallResult
    {
        public readonly ImmutableArray<Outputs.GetFirewallAddressListResult> AddressLists;
        /// <summary>
        /// The provider-assigned unique ID for this managed resource.
        /// </summary>
        public readonly string Id;
        public readonly ImmutableArray<Outputs.GetFirewallMangleResult> Mangles;
        public readonly ImmutableArray<Outputs.GetFirewallNatResult> Nats;
        public readonly ImmutableArray<Outputs.GetFirewallRuleResult> Rules;

        [OutputConstructor]
        private GetFirewallResult(
            ImmutableArray<Outputs.GetFirewallAddressListResult> addressLists,

            string id,

            ImmutableArray<Outputs.GetFirewallMangleResult> mangles,

            ImmutableArray<Outputs.GetFirewallNatResult> nats,

            ImmutableArray<Outputs.GetFirewallRuleResult> rules)
        {
            AddressLists = addressLists;
            Id = id;
            Mangles = mangles;
            Nats = nats;
            Rules = rules;
        }
    }
}
