package com.sonic.common.rpc;

import java.util.Optional;
import java.util.function.Function;

import org.apache.commons.lang3.StringUtils;

/**
 * 代理rpc请求, 并处理授权的token信息.
 */
public interface AuthRequestProxy {

    /**
     * 代理runner发起request请求. 在请求中添加授权的token
     * 会自动添加相关的授权处理
     *
     * @param runner 被代理的请求.
     * @param <T>    runner返回的数据, key是token
     * @return 失败返回Optional.empty, 成功返回runner中返回的数据
     */
    <T> Optional<T> request(Function<String, T> runner);

    AuthRequestProxy SIMPLE_PROXY = new AuthRequestProxy() {
        @Override
        public <T> Optional<T> request(Function<String, T> runner) {
            return Optional.ofNullable(runner.apply(StringUtils.EMPTY));
        }
    };
}
