xref: /aosp_15_r20/external/grpc-grpc/bazel/grpc_util.bzl (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# Copyright 2021 The gRPC Authors
2*cc02d7e2SAndroid Build Coastguard Worker#
3*cc02d7e2SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*cc02d7e2SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*cc02d7e2SAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*cc02d7e2SAndroid Build Coastguard Worker#
7*cc02d7e2SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*cc02d7e2SAndroid Build Coastguard Worker#
9*cc02d7e2SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*cc02d7e2SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*cc02d7e2SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cc02d7e2SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*cc02d7e2SAndroid Build Coastguard Worker# limitations under the License.
14*cc02d7e2SAndroid Build Coastguard Worker# Follows convention set in objectivec_helpers.cc in the protobuf ObjC compiler.
15*cc02d7e2SAndroid Build Coastguard Worker
16*cc02d7e2SAndroid Build Coastguard Worker"""
17*cc02d7e2SAndroid Build Coastguard WorkerContains generic helper utilities.
18*cc02d7e2SAndroid Build Coastguard Worker"""
19*cc02d7e2SAndroid Build Coastguard Worker
20*cc02d7e2SAndroid Build Coastguard Worker_upper_segments_list = ["url", "http", "https"]
21*cc02d7e2SAndroid Build Coastguard Worker
22*cc02d7e2SAndroid Build Coastguard Workerdef strip_extension(str):
23*cc02d7e2SAndroid Build Coastguard Worker    return str.rpartition(".")[0]
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Workerdef capitalize(word):
26*cc02d7e2SAndroid Build Coastguard Worker    if word in _upper_segments_list:
27*cc02d7e2SAndroid Build Coastguard Worker        return word.upper()
28*cc02d7e2SAndroid Build Coastguard Worker    else:
29*cc02d7e2SAndroid Build Coastguard Worker        return word.capitalize()
30*cc02d7e2SAndroid Build Coastguard Worker
31*cc02d7e2SAndroid Build Coastguard Workerdef lower_underscore_to_upper_camel(str):
32*cc02d7e2SAndroid Build Coastguard Worker    """Converts from lower underscore case to upper camel case.
33*cc02d7e2SAndroid Build Coastguard Worker
34*cc02d7e2SAndroid Build Coastguard Worker    Args:
35*cc02d7e2SAndroid Build Coastguard Worker      str: The snake case string to convert.
36*cc02d7e2SAndroid Build Coastguard Worker
37*cc02d7e2SAndroid Build Coastguard Worker    Returns:
38*cc02d7e2SAndroid Build Coastguard Worker      The title case version of str.
39*cc02d7e2SAndroid Build Coastguard Worker    """
40*cc02d7e2SAndroid Build Coastguard Worker    str = strip_extension(str)
41*cc02d7e2SAndroid Build Coastguard Worker    camel_case_str = ""
42*cc02d7e2SAndroid Build Coastguard Worker    word = ""
43*cc02d7e2SAndroid Build Coastguard Worker    for c in str.elems():  # NB: assumes ASCII!
44*cc02d7e2SAndroid Build Coastguard Worker        if c.isalpha():
45*cc02d7e2SAndroid Build Coastguard Worker            word += c.lower()
46*cc02d7e2SAndroid Build Coastguard Worker        else:
47*cc02d7e2SAndroid Build Coastguard Worker            # Last word is finished.
48*cc02d7e2SAndroid Build Coastguard Worker            if len(word):
49*cc02d7e2SAndroid Build Coastguard Worker                camel_case_str += capitalize(word)
50*cc02d7e2SAndroid Build Coastguard Worker                word = ""
51*cc02d7e2SAndroid Build Coastguard Worker            if c.isdigit():
52*cc02d7e2SAndroid Build Coastguard Worker                camel_case_str += c
53*cc02d7e2SAndroid Build Coastguard Worker
54*cc02d7e2SAndroid Build Coastguard Worker            # Otherwise, drop the character. See UnderscoresToCamelCase in:
55*cc02d7e2SAndroid Build Coastguard Worker            # third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.cc
56*cc02d7e2SAndroid Build Coastguard Worker
57*cc02d7e2SAndroid Build Coastguard Worker    if len(word):
58*cc02d7e2SAndroid Build Coastguard Worker        camel_case_str += capitalize(word)
59*cc02d7e2SAndroid Build Coastguard Worker    return camel_case_str
60*cc02d7e2SAndroid Build Coastguard Worker
61*cc02d7e2SAndroid Build Coastguard Workerdef file_to_upper_camel(src):
62*cc02d7e2SAndroid Build Coastguard Worker    elements = src.rpartition("/")
63*cc02d7e2SAndroid Build Coastguard Worker    upper_camel = lower_underscore_to_upper_camel(elements[-1])
64*cc02d7e2SAndroid Build Coastguard Worker    return "".join(list(elements[:-1]) + [upper_camel])
65*cc02d7e2SAndroid Build Coastguard Worker
66*cc02d7e2SAndroid Build Coastguard Workerdef file_with_extension(src, ext):
67*cc02d7e2SAndroid Build Coastguard Worker    elements = src.rpartition("/")
68*cc02d7e2SAndroid Build Coastguard Worker    return "".join(list(elements[:-1]) + [elements[-1], "." + ext])
69*cc02d7e2SAndroid Build Coastguard Worker
70*cc02d7e2SAndroid Build Coastguard Workerdef to_upper_camel_with_extension(src, ext):
71*cc02d7e2SAndroid Build Coastguard Worker    src = file_to_upper_camel(src)
72*cc02d7e2SAndroid Build Coastguard Worker    return file_with_extension(src, ext)
73