All Downloads are FREE. Search and download functionalities are using the official Maven repository.

software.amazon.awssdk.services.kinesisvideo.endpoints.internal.Scope Maven / Gradle / Ivy

Go to download

The AWS Java SDK for Amazon Kinesis Video Streams module holds the client classes that are used for communicating with Amazon Kinesis Video Streams Service

There is a newer version: 2.28.4
Show newest version
/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
 * the License. A copy of the License is located at
 * 
 * http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
 * and limitations under the License.
 */

package software.amazon.awssdk.services.kinesisvideo.endpoints.internal;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.HashMap;
import java.util.Optional;
import java.util.function.Supplier;
import software.amazon.awssdk.annotations.SdkInternalApi;

@SdkInternalApi
public class Scope {
    private final Deque> scope;

    public Scope() {
        this.scope = new ArrayDeque<>();
        this.scope.push(new FatScope());
    }

    public void push() {
        scope.push(new FatScope<>());
    }

    public void pop() {
        scope.pop();
    }

    public void insert(String name, T value) {
        this.insert(Identifier.of(name), value);
    }

    public void insert(Identifier name, T value) {
        this.scope.getFirst().types().put(name, value);
    }

    public void insertFact(Expr name, T value) {
        this.scope.getFirst().facts().put(name, value);
    }

    public  U inScope(Supplier func) {
        this.push();
        try {
            return func.get();
        } finally {
            this.pop();
        }
    }

    @Override
    public String toString() {
        HashMap toPrint = new HashMap<>();
        for (FatScope layer : scope) {
            toPrint.putAll(layer.types());
        }
        return toPrint.toString();
    }

    /**
     * Search the fact stack for an explicitly calculated value for [expr]
     * 

* Currently, this is only impacted by the `isSet` function which will record `T`, rather than {@code Option} for * its arguments * * @param expr * The expression to evaluate * @return The value from the scope */ public Optional eval(Expr expr) { for (FatScope layer : scope) { if (layer.facts().containsKey(expr)) { return Optional.of(layer.facts().get(expr)); } } return Optional.empty(); } public T expectValue(Identifier name) { for (FatScope layer : scope) { if (layer.types().containsKey(name)) { return layer.types().get(name); } } throw new InnerParseError(String.format("No field named %s", name)); } public Optional getValue(Identifier name) { for (FatScope layer : scope) { if (layer.types().containsKey(name)) { return Optional.of(layer.types().get(name)); } } return Optional.empty(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy