// *** 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.vpclattice;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ServiceNetworkVpcAssociationArgs extends com.pulumi.resources.ResourceArgs {

    public static final ServiceNetworkVpcAssociationArgs Empty = new ServiceNetworkVpcAssociationArgs();

    /**
     * The IDs of the security groups.
     * 
     */
    @Import(name="securityGroupIds")
    private @Nullable Output<List<String>> securityGroupIds;

    /**
     * @return The IDs of the security groups.
     * 
     */
    public Optional<Output<List<String>>> securityGroupIds() {
        return Optional.ofNullable(this.securityGroupIds);
    }

    /**
     * The ID or Amazon Resource Identifier (ARN) of the service network. You must use the ARN if the resources specified in the operation are in different accounts.
     * The following arguments are optional:
     * 
     */
    @Import(name="serviceNetworkIdentifier", required=true)
    private Output<String> serviceNetworkIdentifier;

    /**
     * @return The ID or Amazon Resource Identifier (ARN) of the service network. You must use the ARN if the resources specified in the operation are in different accounts.
     * The following arguments are optional:
     * 
     */
    public Output<String> serviceNetworkIdentifier() {
        return this.serviceNetworkIdentifier;
    }

    /**
     * Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * The ID of the VPC.
     * 
     */
    @Import(name="vpcIdentifier", required=true)
    private Output<String> vpcIdentifier;

    /**
     * @return The ID of the VPC.
     * 
     */
    public Output<String> vpcIdentifier() {
        return this.vpcIdentifier;
    }

    private ServiceNetworkVpcAssociationArgs() {}

    private ServiceNetworkVpcAssociationArgs(ServiceNetworkVpcAssociationArgs $) {
        this.securityGroupIds = $.securityGroupIds;
        this.serviceNetworkIdentifier = $.serviceNetworkIdentifier;
        this.tags = $.tags;
        this.vpcIdentifier = $.vpcIdentifier;
    }

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

    public static final class Builder {
        private ServiceNetworkVpcAssociationArgs $;

        public Builder() {
            $ = new ServiceNetworkVpcAssociationArgs();
        }

        public Builder(ServiceNetworkVpcAssociationArgs defaults) {
            $ = new ServiceNetworkVpcAssociationArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param securityGroupIds The IDs of the security groups.
         * 
         * @return builder
         * 
         */
        public Builder securityGroupIds(@Nullable Output<List<String>> securityGroupIds) {
            $.securityGroupIds = securityGroupIds;
            return this;
        }

        /**
         * @param securityGroupIds The IDs of the security groups.
         * 
         * @return builder
         * 
         */
        public Builder securityGroupIds(List<String> securityGroupIds) {
            return securityGroupIds(Output.of(securityGroupIds));
        }

        /**
         * @param securityGroupIds The IDs of the security groups.
         * 
         * @return builder
         * 
         */
        public Builder securityGroupIds(String... securityGroupIds) {
            return securityGroupIds(List.of(securityGroupIds));
        }

        /**
         * @param serviceNetworkIdentifier The ID or Amazon Resource Identifier (ARN) of the service network. You must use the ARN if the resources specified in the operation are in different accounts.
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder serviceNetworkIdentifier(Output<String> serviceNetworkIdentifier) {
            $.serviceNetworkIdentifier = serviceNetworkIdentifier;
            return this;
        }

        /**
         * @param serviceNetworkIdentifier The ID or Amazon Resource Identifier (ARN) of the service network. You must use the ARN if the resources specified in the operation are in different accounts.
         * The following arguments are optional:
         * 
         * @return builder
         * 
         */
        public Builder serviceNetworkIdentifier(String serviceNetworkIdentifier) {
            return serviceNetworkIdentifier(Output.of(serviceNetworkIdentifier));
        }

        /**
         * @param tags Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags Key-value mapping of resource tags. If configured with a provider `default_tags` configuration block present, tags with matching keys will overwrite those defined at the provider-level.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param vpcIdentifier The ID of the VPC.
         * 
         * @return builder
         * 
         */
        public Builder vpcIdentifier(Output<String> vpcIdentifier) {
            $.vpcIdentifier = vpcIdentifier;
            return this;
        }

        /**
         * @param vpcIdentifier The ID of the VPC.
         * 
         * @return builder
         * 
         */
        public Builder vpcIdentifier(String vpcIdentifier) {
            return vpcIdentifier(Output.of(vpcIdentifier));
        }

        public ServiceNetworkVpcAssociationArgs build() {
            $.serviceNetworkIdentifier = Objects.requireNonNull($.serviceNetworkIdentifier, "expected parameter 'serviceNetworkIdentifier' to be non-null");
            $.vpcIdentifier = Objects.requireNonNull($.vpcIdentifier, "expected parameter 'vpcIdentifier' to be non-null");
            return $;
        }
    }

}
