1 /*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package com.android.server.permission.access.util
18
19 import com.android.modules.utils.BinaryXmlSerializer
20 import java.io.IOException
21 import java.io.OutputStream
22
23 /** Serialize content into [OutputStream] with [BinaryXmlSerializer]. */
24 @Throws(IOException::class)
serializeBinaryXmlnull25 inline fun OutputStream.serializeBinaryXml(block: BinaryXmlSerializer.() -> Unit) {
26 BinaryXmlSerializer().apply {
27 setOutput(this@serializeBinaryXml, null)
28 document(block)
29 }
30 }
31
32 /**
33 * Write a document with [BinaryXmlSerializer].
34 *
35 * @see BinaryXmlSerializer.startDocument
36 * @see BinaryXmlSerializer.endDocument
37 */
38 @Throws(IOException::class)
documentnull39 inline fun BinaryXmlSerializer.document(block: BinaryXmlSerializer.() -> Unit) {
40 startDocument(null, true)
41 block()
42 endDocument()
43 }
44
45 /**
46 * Write a tag with [BinaryXmlSerializer].
47 *
48 * @see BinaryXmlSerializer.startTag
49 * @see BinaryXmlSerializer.endTag
50 */
51 @Throws(IOException::class)
tagnull52 inline fun BinaryXmlSerializer.tag(name: String, block: BinaryXmlSerializer.() -> Unit) {
53 startTag(null, name)
54 block()
55 endTag(null, name)
56 }
57
58 /** @see BinaryXmlSerializer.attribute */
59 @Suppress("NOTHING_TO_INLINE")
60 @Throws(IOException::class)
attributenull61 inline fun BinaryXmlSerializer.attribute(name: String, value: String) {
62 attribute(null, name, value)
63 }
64
65 /** @see BinaryXmlSerializer.attributeInterned */
66 @Suppress("NOTHING_TO_INLINE")
67 @Throws(IOException::class)
attributeInternednull68 inline fun BinaryXmlSerializer.attributeInterned(name: String, value: String) {
69 attributeInterned(null, name, value)
70 }
71
72 /** @see BinaryXmlSerializer.attributeBytesHex */
73 @Suppress("NOTHING_TO_INLINE")
74 @Throws(IOException::class)
attributeBytesHexnull75 inline fun BinaryXmlSerializer.attributeBytesHex(name: String, value: ByteArray) {
76 attributeBytesHex(null, name, value)
77 }
78
79 /** @see BinaryXmlSerializer.attributeBytesBase64 */
80 @Suppress("NOTHING_TO_INLINE")
81 @Throws(IOException::class)
attributeBytesBase64null82 inline fun BinaryXmlSerializer.attributeBytesBase64(name: String, value: ByteArray) {
83 attributeBytesBase64(null, name, value)
84 }
85
86 /** @see BinaryXmlSerializer.attributeInt */
87 @Suppress("NOTHING_TO_INLINE")
88 @Throws(IOException::class)
attributeIntnull89 inline fun BinaryXmlSerializer.attributeInt(name: String, value: Int) {
90 attributeInt(null, name, value)
91 }
92
93 /** @see BinaryXmlSerializer.attributeInt */
94 @Suppress("NOTHING_TO_INLINE")
95 @Throws(IOException::class)
attributeIntWithDefaultnull96 inline fun BinaryXmlSerializer.attributeIntWithDefault(
97 name: String,
98 value: Int,
99 defaultValue: Int
100 ) {
101 if (value != defaultValue) {
102 attributeInt(null, name, value)
103 }
104 }
105
106 /** @see BinaryXmlSerializer.attributeIntHex */
107 @Suppress("NOTHING_TO_INLINE")
108 @Throws(IOException::class)
attributeIntHexnull109 inline fun BinaryXmlSerializer.attributeIntHex(name: String, value: Int) {
110 attributeIntHex(null, name, value)
111 }
112
113 /** @see BinaryXmlSerializer.attributeIntHex */
114 @Suppress("NOTHING_TO_INLINE")
115 @Throws(IOException::class)
attributeIntHexWithDefaultnull116 inline fun BinaryXmlSerializer.attributeIntHexWithDefault(
117 name: String,
118 value: Int,
119 defaultValue: Int
120 ) {
121 if (value != defaultValue) {
122 attributeIntHex(null, name, value)
123 }
124 }
125
126 /** @see BinaryXmlSerializer.attributeLong */
127 @Suppress("NOTHING_TO_INLINE")
128 @Throws(IOException::class)
attributeLongnull129 inline fun BinaryXmlSerializer.attributeLong(name: String, value: Long) {
130 attributeLong(null, name, value)
131 }
132
133 /** @see BinaryXmlSerializer.attributeLong */
134 @Suppress("NOTHING_TO_INLINE")
135 @Throws(IOException::class)
attributeLongWithDefaultnull136 inline fun BinaryXmlSerializer.attributeLongWithDefault(
137 name: String,
138 value: Long,
139 defaultValue: Long
140 ) {
141 if (value != defaultValue) {
142 attributeLong(null, name, value)
143 }
144 }
145
146 /** @see BinaryXmlSerializer.attributeLongHex */
147 @Suppress("NOTHING_TO_INLINE")
148 @Throws(IOException::class)
attributeLongHexnull149 inline fun BinaryXmlSerializer.attributeLongHex(name: String, value: Long) {
150 attributeLongHex(null, name, value)
151 }
152
153 /** @see BinaryXmlSerializer.attributeLongHex */
154 @Suppress("NOTHING_TO_INLINE")
155 @Throws(IOException::class)
attributeLongHexWithDefaultnull156 inline fun BinaryXmlSerializer.attributeLongHexWithDefault(
157 name: String,
158 value: Long,
159 defaultValue: Long
160 ) {
161 if (value != defaultValue) {
162 attributeLongHex(null, name, value)
163 }
164 }
165
166 /** @see BinaryXmlSerializer.attributeFloat */
167 @Suppress("NOTHING_TO_INLINE")
168 @Throws(IOException::class)
attributeFloatnull169 inline fun BinaryXmlSerializer.attributeFloat(name: String, value: Float) {
170 attributeFloat(null, name, value)
171 }
172
173 /** @see BinaryXmlSerializer.attributeFloat */
174 @Suppress("NOTHING_TO_INLINE")
175 @Throws(IOException::class)
attributeFloatWithDefaultnull176 inline fun BinaryXmlSerializer.attributeFloatWithDefault(
177 name: String,
178 value: Float,
179 defaultValue: Float
180 ) {
181 if (value != defaultValue) {
182 attributeFloat(null, name, value)
183 }
184 }
185
186 /** @see BinaryXmlSerializer.attributeDouble */
187 @Suppress("NOTHING_TO_INLINE")
188 @Throws(IOException::class)
attributeDoublenull189 inline fun BinaryXmlSerializer.attributeDouble(name: String, value: Double) {
190 attributeDouble(null, name, value)
191 }
192
193 /** @see BinaryXmlSerializer.attributeDouble */
194 @Suppress("NOTHING_TO_INLINE")
195 @Throws(IOException::class)
attributeDoubleWithDefaultnull196 inline fun BinaryXmlSerializer.attributeDoubleWithDefault(
197 name: String,
198 value: Double,
199 defaultValue: Double
200 ) {
201 if (value != defaultValue) {
202 attributeDouble(null, name, value)
203 }
204 }
205
206 /** @see BinaryXmlSerializer.attributeBoolean */
207 @Suppress("NOTHING_TO_INLINE")
208 @Throws(IOException::class)
attributeBooleannull209 inline fun BinaryXmlSerializer.attributeBoolean(name: String, value: Boolean) {
210 attributeBoolean(null, name, value)
211 }
212
213 /** @see BinaryXmlSerializer.attributeBoolean */
214 @Suppress("NOTHING_TO_INLINE")
215 @Throws(IOException::class)
attributeBooleanWithDefaultnull216 inline fun BinaryXmlSerializer.attributeBooleanWithDefault(
217 name: String,
218 value: Boolean,
219 defaultValue: Boolean
220 ) {
221 if (value != defaultValue) {
222 attributeBoolean(null, name, value)
223 }
224 }
225