// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.aws.ec2.outputs;

import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentAclRule;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentAdditionalDetail;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentAttachedTo;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentComponent;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentDestinationVpc;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentInboundHeader;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentOutboundHeader;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentRouteTableRoute;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentSourceVpc;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentSubnet;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentTransitGateway;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute;
import com.pulumi.aws.ec2.outputs.NetworkInsightsAnalysisReturnPathComponentVpc;
import com.pulumi.core.annotations.CustomType;
import java.lang.Integer;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class NetworkInsightsAnalysisReturnPathComponent {
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAclRule> aclRules;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAdditionalDetail> additionalDetails;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAttachedTo> attachedTos;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentComponent> components;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentDestinationVpc> destinationVpcs;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentInboundHeader> inboundHeaders;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentOutboundHeader> outboundHeaders;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentRouteTableRoute> routeTableRoutes;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule> securityGroupRules;
    private @Nullable Integer sequenceNumber;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSourceVpc> sourceVpcs;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSubnet> subnets;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute> transitGatewayRouteTableRoutes;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGateway> transitGateways;
    private @Nullable List<NetworkInsightsAnalysisReturnPathComponentVpc> vpcs;

    private NetworkInsightsAnalysisReturnPathComponent() {}
    public List<NetworkInsightsAnalysisReturnPathComponentAclRule> aclRules() {
        return this.aclRules == null ? List.of() : this.aclRules;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentAdditionalDetail> additionalDetails() {
        return this.additionalDetails == null ? List.of() : this.additionalDetails;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentAttachedTo> attachedTos() {
        return this.attachedTos == null ? List.of() : this.attachedTos;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentComponent> components() {
        return this.components == null ? List.of() : this.components;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentDestinationVpc> destinationVpcs() {
        return this.destinationVpcs == null ? List.of() : this.destinationVpcs;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentInboundHeader> inboundHeaders() {
        return this.inboundHeaders == null ? List.of() : this.inboundHeaders;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentOutboundHeader> outboundHeaders() {
        return this.outboundHeaders == null ? List.of() : this.outboundHeaders;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentRouteTableRoute> routeTableRoutes() {
        return this.routeTableRoutes == null ? List.of() : this.routeTableRoutes;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule> securityGroupRules() {
        return this.securityGroupRules == null ? List.of() : this.securityGroupRules;
    }
    public Optional<Integer> sequenceNumber() {
        return Optional.ofNullable(this.sequenceNumber);
    }
    public List<NetworkInsightsAnalysisReturnPathComponentSourceVpc> sourceVpcs() {
        return this.sourceVpcs == null ? List.of() : this.sourceVpcs;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentSubnet> subnets() {
        return this.subnets == null ? List.of() : this.subnets;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute> transitGatewayRouteTableRoutes() {
        return this.transitGatewayRouteTableRoutes == null ? List.of() : this.transitGatewayRouteTableRoutes;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentTransitGateway> transitGateways() {
        return this.transitGateways == null ? List.of() : this.transitGateways;
    }
    public List<NetworkInsightsAnalysisReturnPathComponentVpc> vpcs() {
        return this.vpcs == null ? List.of() : this.vpcs;
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(NetworkInsightsAnalysisReturnPathComponent defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAclRule> aclRules;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAdditionalDetail> additionalDetails;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentAttachedTo> attachedTos;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentComponent> components;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentDestinationVpc> destinationVpcs;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentInboundHeader> inboundHeaders;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentOutboundHeader> outboundHeaders;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentRouteTableRoute> routeTableRoutes;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule> securityGroupRules;
        private @Nullable Integer sequenceNumber;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSourceVpc> sourceVpcs;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentSubnet> subnets;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute> transitGatewayRouteTableRoutes;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGateway> transitGateways;
        private @Nullable List<NetworkInsightsAnalysisReturnPathComponentVpc> vpcs;
        public Builder() {}
        public Builder(NetworkInsightsAnalysisReturnPathComponent defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.aclRules = defaults.aclRules;
    	      this.additionalDetails = defaults.additionalDetails;
    	      this.attachedTos = defaults.attachedTos;
    	      this.components = defaults.components;
    	      this.destinationVpcs = defaults.destinationVpcs;
    	      this.inboundHeaders = defaults.inboundHeaders;
    	      this.outboundHeaders = defaults.outboundHeaders;
    	      this.routeTableRoutes = defaults.routeTableRoutes;
    	      this.securityGroupRules = defaults.securityGroupRules;
    	      this.sequenceNumber = defaults.sequenceNumber;
    	      this.sourceVpcs = defaults.sourceVpcs;
    	      this.subnets = defaults.subnets;
    	      this.transitGatewayRouteTableRoutes = defaults.transitGatewayRouteTableRoutes;
    	      this.transitGateways = defaults.transitGateways;
    	      this.vpcs = defaults.vpcs;
        }

        @CustomType.Setter
        public Builder aclRules(@Nullable List<NetworkInsightsAnalysisReturnPathComponentAclRule> aclRules) {
            this.aclRules = aclRules;
            return this;
        }
        public Builder aclRules(NetworkInsightsAnalysisReturnPathComponentAclRule... aclRules) {
            return aclRules(List.of(aclRules));
        }
        @CustomType.Setter
        public Builder additionalDetails(@Nullable List<NetworkInsightsAnalysisReturnPathComponentAdditionalDetail> additionalDetails) {
            this.additionalDetails = additionalDetails;
            return this;
        }
        public Builder additionalDetails(NetworkInsightsAnalysisReturnPathComponentAdditionalDetail... additionalDetails) {
            return additionalDetails(List.of(additionalDetails));
        }
        @CustomType.Setter
        public Builder attachedTos(@Nullable List<NetworkInsightsAnalysisReturnPathComponentAttachedTo> attachedTos) {
            this.attachedTos = attachedTos;
            return this;
        }
        public Builder attachedTos(NetworkInsightsAnalysisReturnPathComponentAttachedTo... attachedTos) {
            return attachedTos(List.of(attachedTos));
        }
        @CustomType.Setter
        public Builder components(@Nullable List<NetworkInsightsAnalysisReturnPathComponentComponent> components) {
            this.components = components;
            return this;
        }
        public Builder components(NetworkInsightsAnalysisReturnPathComponentComponent... components) {
            return components(List.of(components));
        }
        @CustomType.Setter
        public Builder destinationVpcs(@Nullable List<NetworkInsightsAnalysisReturnPathComponentDestinationVpc> destinationVpcs) {
            this.destinationVpcs = destinationVpcs;
            return this;
        }
        public Builder destinationVpcs(NetworkInsightsAnalysisReturnPathComponentDestinationVpc... destinationVpcs) {
            return destinationVpcs(List.of(destinationVpcs));
        }
        @CustomType.Setter
        public Builder inboundHeaders(@Nullable List<NetworkInsightsAnalysisReturnPathComponentInboundHeader> inboundHeaders) {
            this.inboundHeaders = inboundHeaders;
            return this;
        }
        public Builder inboundHeaders(NetworkInsightsAnalysisReturnPathComponentInboundHeader... inboundHeaders) {
            return inboundHeaders(List.of(inboundHeaders));
        }
        @CustomType.Setter
        public Builder outboundHeaders(@Nullable List<NetworkInsightsAnalysisReturnPathComponentOutboundHeader> outboundHeaders) {
            this.outboundHeaders = outboundHeaders;
            return this;
        }
        public Builder outboundHeaders(NetworkInsightsAnalysisReturnPathComponentOutboundHeader... outboundHeaders) {
            return outboundHeaders(List.of(outboundHeaders));
        }
        @CustomType.Setter
        public Builder routeTableRoutes(@Nullable List<NetworkInsightsAnalysisReturnPathComponentRouteTableRoute> routeTableRoutes) {
            this.routeTableRoutes = routeTableRoutes;
            return this;
        }
        public Builder routeTableRoutes(NetworkInsightsAnalysisReturnPathComponentRouteTableRoute... routeTableRoutes) {
            return routeTableRoutes(List.of(routeTableRoutes));
        }
        @CustomType.Setter
        public Builder securityGroupRules(@Nullable List<NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule> securityGroupRules) {
            this.securityGroupRules = securityGroupRules;
            return this;
        }
        public Builder securityGroupRules(NetworkInsightsAnalysisReturnPathComponentSecurityGroupRule... securityGroupRules) {
            return securityGroupRules(List.of(securityGroupRules));
        }
        @CustomType.Setter
        public Builder sequenceNumber(@Nullable Integer sequenceNumber) {
            this.sequenceNumber = sequenceNumber;
            return this;
        }
        @CustomType.Setter
        public Builder sourceVpcs(@Nullable List<NetworkInsightsAnalysisReturnPathComponentSourceVpc> sourceVpcs) {
            this.sourceVpcs = sourceVpcs;
            return this;
        }
        public Builder sourceVpcs(NetworkInsightsAnalysisReturnPathComponentSourceVpc... sourceVpcs) {
            return sourceVpcs(List.of(sourceVpcs));
        }
        @CustomType.Setter
        public Builder subnets(@Nullable List<NetworkInsightsAnalysisReturnPathComponentSubnet> subnets) {
            this.subnets = subnets;
            return this;
        }
        public Builder subnets(NetworkInsightsAnalysisReturnPathComponentSubnet... subnets) {
            return subnets(List.of(subnets));
        }
        @CustomType.Setter
        public Builder transitGatewayRouteTableRoutes(@Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute> transitGatewayRouteTableRoutes) {
            this.transitGatewayRouteTableRoutes = transitGatewayRouteTableRoutes;
            return this;
        }
        public Builder transitGatewayRouteTableRoutes(NetworkInsightsAnalysisReturnPathComponentTransitGatewayRouteTableRoute... transitGatewayRouteTableRoutes) {
            return transitGatewayRouteTableRoutes(List.of(transitGatewayRouteTableRoutes));
        }
        @CustomType.Setter
        public Builder transitGateways(@Nullable List<NetworkInsightsAnalysisReturnPathComponentTransitGateway> transitGateways) {
            this.transitGateways = transitGateways;
            return this;
        }
        public Builder transitGateways(NetworkInsightsAnalysisReturnPathComponentTransitGateway... transitGateways) {
            return transitGateways(List.of(transitGateways));
        }
        @CustomType.Setter
        public Builder vpcs(@Nullable List<NetworkInsightsAnalysisReturnPathComponentVpc> vpcs) {
            this.vpcs = vpcs;
            return this;
        }
        public Builder vpcs(NetworkInsightsAnalysisReturnPathComponentVpc... vpcs) {
            return vpcs(List.of(vpcs));
        }
        public NetworkInsightsAnalysisReturnPathComponent build() {
            final var o = new NetworkInsightsAnalysisReturnPathComponent();
            o.aclRules = aclRules;
            o.additionalDetails = additionalDetails;
            o.attachedTos = attachedTos;
            o.components = components;
            o.destinationVpcs = destinationVpcs;
            o.inboundHeaders = inboundHeaders;
            o.outboundHeaders = outboundHeaders;
            o.routeTableRoutes = routeTableRoutes;
            o.securityGroupRules = securityGroupRules;
            o.sequenceNumber = sequenceNumber;
            o.sourceVpcs = sourceVpcs;
            o.subnets = subnets;
            o.transitGatewayRouteTableRoutes = transitGatewayRouteTableRoutes;
            o.transitGateways = transitGateways;
            o.vpcs = vpcs;
            return o;
        }
    }
}
