mod abi;
mod name;
mod path;
mod sdk;
pub use abi::{Abi, UnknownAbi};
pub use name::{
ClassName, ClassNameError, LibraryName, LibraryNameError, PackageName, PackageNameError, PermissionName,
PermissionNameError,
};
pub use path::{ArchivePath, ArchivePathError, MAX_ARCHIVE_PATH_LEN};
pub use sdk::{ApiLevel, ApiLevelError, VersionCode, VersionCodeError};
pub(crate) fn is_java_identifier(s: &str) -> bool {
let mut bytes = s.bytes();
bytes.next().is_some_and(|b| b.is_ascii_alphabetic() || b == b'_' || b == b'$')
&& bytes.all(|b| b.is_ascii_alphanumeric() || b == b'_' || b == b'$')
}