bazel-skylib/lib/types.bzl

153 lines
3.7 KiB
Python

# Copyright 2018 The Bazel Authors. 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.
# 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.
"""Skylib module containing functions checking types."""
# create instance singletons to avoid unnecessary allocations
_a_bool_type = type(True)
_a_dict_type = type({})
_a_list_type = type([])
_a_string_type = type("")
_a_tuple_type = type(())
_an_int_type = type(1)
_a_depset_type = type(depset())
_a_struct_type = type(struct())
def _a_function():
pass
_a_function_type = type(_a_function)
def _is_list(v):
"""Returns True if v is an instance of a list.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a list, False otherwise.
"""
return type(v) == _a_list_type
def _is_string(v):
"""Returns True if v is an instance of a string.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a string, False otherwise.
"""
return type(v) == _a_string_type
def _is_bool(v):
"""Returns True if v is an instance of a bool.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a bool, False otherwise.
"""
return type(v) == _a_bool_type
def _is_none(v):
"""Returns True if v has the type of None.
Args:
v: The value whose type should be checked.
Returns:
True if v is None, False otherwise.
"""
return type(v) == type(None)
def _is_int(v):
"""Returns True if v is an instance of a signed integer.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a signed integer, False otherwise.
"""
return type(v) == _an_int_type
def _is_tuple(v):
"""Returns True if v is an instance of a tuple.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a tuple, False otherwise.
"""
return type(v) == _a_tuple_type
def _is_dict(v):
"""Returns True if v is an instance of a dict.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a dict, False otherwise.
"""
return type(v) == _a_dict_type
def _is_function(v):
"""Returns True if v is an instance of a function.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a function, False otherwise.
"""
return type(v) == _a_function_type
def _is_depset(v):
"""Returns True if v is an instance of a `depset`.
Args:
v: The value whose type should be checked.
Returns:
True if v is an instance of a `depset`, False otherwise.
"""
return type(v) == _a_depset_type
def _is_set(v):
"""Returns True if v is a set created by sets.make().
Args:
v: The value whose type should be checked.
Returns:
True if v was created by sets.make(), False otherwise.
"""
return type(v) == _a_struct_type and hasattr(v, "_values") and _is_dict(v._values)
types = struct(
is_list = _is_list,
is_string = _is_string,
is_bool = _is_bool,
is_none = _is_none,
is_int = _is_int,
is_tuple = _is_tuple,
is_dict = _is_dict,
is_function = _is_function,
is_depset = _is_depset,
is_set = _is_set,
)