Skip to main content

apk/types/
mod.rs

1//! Validated primitive values shared across the crate.
2//!
3//! Each type checks its invariants once, at construction (`try_new`,
4//! `FromStr`, or `TryFrom`), and reports violations with its own error enum.
5
6mod abi;
7mod name;
8mod path;
9mod sdk;
10
11pub use abi::{Abi, UnknownAbi};
12pub use name::{
13    ClassName, ClassNameError, LibraryName, LibraryNameError, PackageName, PackageNameError, PermissionName,
14    PermissionNameError,
15};
16pub use path::{ArchivePath, ArchivePathError, MAX_ARCHIVE_PATH_LEN};
17pub use sdk::{ApiLevel, ApiLevelError, VersionCode, VersionCodeError};
18
19/// Whether `s` is a Java identifier restricted to ASCII, the rule Android
20/// applies to package and class name segments.
21pub(crate) fn is_java_identifier(s: &str) -> bool {
22    let mut bytes = s.bytes();
23    bytes.next().is_some_and(|b| b.is_ascii_alphabetic() || b == b'_' || b == b'$')
24        && bytes.all(|b| b.is_ascii_alphanumeric() || b == b'_' || b == b'$')
25}