
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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.
 */

#include "utils.h"

#include <android-base/logging.h>
#include <android-base/properties.h>

namespace android {
namespace vintf {
namespace details {

std::string PropertyFetcherNoOp::getProperty(const std::string&,
                                             const std::string& defaultValue) const {
    return defaultValue;
}

uint64_t PropertyFetcherNoOp::getUintProperty(const std::string&, uint64_t,
                                              uint64_t defaultValue) const {
    return defaultValue;
}

bool PropertyFetcherNoOp::getBoolProperty(const std::string&, bool defaultValue) const {
    return defaultValue;
}

std::string PropertyFetcherImpl::getProperty(const std::string& key,
                                             const std::string& defaultValue) const {
    return android::base::GetProperty(key, defaultValue);
}

uint64_t PropertyFetcherImpl::getUintProperty(const std::string& key, uint64_t defaultValue,
                                              uint64_t max) const {
    return android::base::GetUintProperty(key, defaultValue, max);
}

bool PropertyFetcherImpl::getBoolProperty(const std::string& key, bool defaultValue) const {
    return android::base::GetBoolProperty(key, defaultValue);
}

}  // namespace details
}  // namespace vintf
}  // namespace android
