// *** 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.gcp.organizations.inputs;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.organizations.inputs.PolicyListPolicyAllowArgs;
import com.pulumi.gcp.organizations.inputs.PolicyListPolicyDenyArgs;
import java.lang.Boolean;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final PolicyListPolicyArgs Empty = new PolicyListPolicyArgs();

    /**
     * or `deny` - (Optional) One or the other must be set.
     * 
     */
    @Import(name="allow")
    private @Nullable Output<PolicyListPolicyAllowArgs> allow;

    /**
     * @return or `deny` - (Optional) One or the other must be set.
     * 
     */
    public Optional<Output<PolicyListPolicyAllowArgs>> allow() {
        return Optional.ofNullable(this.allow);
    }

    @Import(name="deny")
    private @Nullable Output<PolicyListPolicyDenyArgs> deny;

    public Optional<Output<PolicyListPolicyDenyArgs>> deny() {
        return Optional.ofNullable(this.deny);
    }

    /**
     * If set to true, the values from the effective Policy of the parent resource
     * are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.
     * 
     * The `allow` or `deny` blocks support:
     * 
     */
    @Import(name="inheritFromParent")
    private @Nullable Output<Boolean> inheritFromParent;

    /**
     * @return If set to true, the values from the effective Policy of the parent resource
     * are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.
     * 
     * The `allow` or `deny` blocks support:
     * 
     */
    public Optional<Output<Boolean>> inheritFromParent() {
        return Optional.ofNullable(this.inheritFromParent);
    }

    /**
     * The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
     * 
     */
    @Import(name="suggestedValue")
    private @Nullable Output<String> suggestedValue;

    /**
     * @return The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
     * 
     */
    public Optional<Output<String>> suggestedValue() {
        return Optional.ofNullable(this.suggestedValue);
    }

    private PolicyListPolicyArgs() {}

    private PolicyListPolicyArgs(PolicyListPolicyArgs $) {
        this.allow = $.allow;
        this.deny = $.deny;
        this.inheritFromParent = $.inheritFromParent;
        this.suggestedValue = $.suggestedValue;
    }

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

    public static final class Builder {
        private PolicyListPolicyArgs $;

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

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

        /**
         * @param allow or `deny` - (Optional) One or the other must be set.
         * 
         * @return builder
         * 
         */
        public Builder allow(@Nullable Output<PolicyListPolicyAllowArgs> allow) {
            $.allow = allow;
            return this;
        }

        /**
         * @param allow or `deny` - (Optional) One or the other must be set.
         * 
         * @return builder
         * 
         */
        public Builder allow(PolicyListPolicyAllowArgs allow) {
            return allow(Output.of(allow));
        }

        public Builder deny(@Nullable Output<PolicyListPolicyDenyArgs> deny) {
            $.deny = deny;
            return this;
        }

        public Builder deny(PolicyListPolicyDenyArgs deny) {
            return deny(Output.of(deny));
        }

        /**
         * @param inheritFromParent If set to true, the values from the effective Policy of the parent resource
         * are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.
         * 
         * The `allow` or `deny` blocks support:
         * 
         * @return builder
         * 
         */
        public Builder inheritFromParent(@Nullable Output<Boolean> inheritFromParent) {
            $.inheritFromParent = inheritFromParent;
            return this;
        }

        /**
         * @param inheritFromParent If set to true, the values from the effective Policy of the parent resource
         * are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.
         * 
         * The `allow` or `deny` blocks support:
         * 
         * @return builder
         * 
         */
        public Builder inheritFromParent(Boolean inheritFromParent) {
            return inheritFromParent(Output.of(inheritFromParent));
        }

        /**
         * @param suggestedValue The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
         * 
         * @return builder
         * 
         */
        public Builder suggestedValue(@Nullable Output<String> suggestedValue) {
            $.suggestedValue = suggestedValue;
            return this;
        }

        /**
         * @param suggestedValue The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
         * 
         * @return builder
         * 
         */
        public Builder suggestedValue(String suggestedValue) {
            return suggestedValue(Output.of(suggestedValue));
        }

        public PolicyListPolicyArgs build() {
            return $;
        }
    }

}
