pub struct FieldAccessFlags(/* private fields */);Expand description
Field access flags used in Java class files to specify the access permissions and properties of fields.
These flags determine visibility (public, private, protected), mutability (final),and other characteristics of class fields. Multiple flags can be combined using bitwise OR operations.
§Examples
Creating field access flags for common field types:
use ristretto_classfile::FieldAccessFlags;
use std::io::Cursor;
// A private final instance field
let flags = FieldAccessFlags::PRIVATE | FieldAccessFlags::FINAL;
// Check if specific flags are set
assert!(flags.contains(FieldAccessFlags::PRIVATE));
assert!(flags.contains(FieldAccessFlags::FINAL));
assert!(!flags.contains(FieldAccessFlags::PUBLIC));
assert!(!flags.contains(FieldAccessFlags::STATIC));
// Get a code representation
assert_eq!("private final", flags.as_code());
// Serialize to bytes
let mut bytes = Vec::new();
flags.to_bytes(&mut bytes)?;
assert_eq!(vec![0x00, 0x12], bytes); // 0x0012 = PRIVATE | FINAL
// Deserialize from bytes
let mut cursor = Cursor::new(bytes);
let deserialized = FieldAccessFlags::from_bytes(&mut cursor)?;
assert_eq!(flags, deserialized);
// Display as string
assert_eq!("(0x0012) ACC_PRIVATE, ACC_FINAL", flags.to_string());§References
Implementations§
Source§impl FieldAccessFlags
impl FieldAccessFlags
Sourcepub const PUBLIC: FieldAccessFlags
pub const PUBLIC: FieldAccessFlags
Declared public; may be accessed from outside its package.
Sourcepub const PRIVATE: FieldAccessFlags
pub const PRIVATE: FieldAccessFlags
Declared private; accessible only within the defining class and other classes belonging to the same nest (§5.4.4).
Sourcepub const PROTECTED: FieldAccessFlags
pub const PROTECTED: FieldAccessFlags
Declared protected; may be accessed within subclasses.
Sourcepub const STATIC: FieldAccessFlags
pub const STATIC: FieldAccessFlags
Declared static.
Sourcepub const FINAL: FieldAccessFlags
pub const FINAL: FieldAccessFlags
Declared final; never directly assigned to after object construction (JLS §17.5).
Sourcepub const VOLATILE: FieldAccessFlags
pub const VOLATILE: FieldAccessFlags
Declared volatile; cannot be cached.
Sourcepub const TRANSIENT: FieldAccessFlags
pub const TRANSIENT: FieldAccessFlags
Declared transient; not written or read by a persistent object manager.
Sourcepub const SYNTHETIC: FieldAccessFlags
pub const SYNTHETIC: FieldAccessFlags
Declared synthetic; not present in the source code.
Sourcepub const ENUM: FieldAccessFlags
pub const ENUM: FieldAccessFlags
Declared as an element of an enum class.
Source§impl FieldAccessFlags
impl FieldAccessFlags
Sourcepub const fn empty() -> FieldAccessFlags
pub const fn empty() -> FieldAccessFlags
Get a flags value with all bits unset.
Sourcepub const fn all() -> FieldAccessFlags
pub const fn all() -> FieldAccessFlags
Get a flags value with all known bits set.
Sourcepub const fn bits(&self) -> u16
pub const fn bits(&self) -> u16
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u16) -> Option<FieldAccessFlags>
pub const fn from_bits(bits: u16) -> Option<FieldAccessFlags>
Convert from a bits value.
This method will return None if any unknown bits are set.
Sourcepub const fn from_bits_truncate(bits: u16) -> FieldAccessFlags
pub const fn from_bits_truncate(bits: u16) -> FieldAccessFlags
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u16) -> FieldAccessFlags
pub const fn from_bits_retain(bits: u16) -> FieldAccessFlags
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<FieldAccessFlags>
pub fn from_name(name: &str) -> Option<FieldAccessFlags>
Get a flags value with the bits of a flag with the given name set.
This method will return None if name is empty or doesn’t
correspond to any named flag.
Sourcepub const fn intersects(&self, other: FieldAccessFlags) -> bool
pub const fn intersects(&self, other: FieldAccessFlags) -> bool
Whether any set bits in a source flags value are also set in a target flags value.
Sourcepub const fn contains(&self, other: FieldAccessFlags) -> bool
pub const fn contains(&self, other: FieldAccessFlags) -> bool
Whether all set bits in a source flags value are also set in a target flags value.
Sourcepub fn insert(&mut self, other: FieldAccessFlags)
pub fn insert(&mut self, other: FieldAccessFlags)
The bitwise or (|) of the bits in two flags values.
Sourcepub fn remove(&mut self, other: FieldAccessFlags)
pub fn remove(&mut self, other: FieldAccessFlags)
The intersection of a source flags value with the complement of a target flags
value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
remove won’t truncate other, but the ! operator will.
Sourcepub fn toggle(&mut self, other: FieldAccessFlags)
pub fn toggle(&mut self, other: FieldAccessFlags)
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub fn set(&mut self, other: FieldAccessFlags, value: bool)
pub fn set(&mut self, other: FieldAccessFlags, value: bool)
Call insert when value is true or remove when value is false.
Sourcepub const fn intersection(self, other: FieldAccessFlags) -> FieldAccessFlags
pub const fn intersection(self, other: FieldAccessFlags) -> FieldAccessFlags
The bitwise and (&) of the bits in two flags values.
Sourcepub const fn union(self, other: FieldAccessFlags) -> FieldAccessFlags
pub const fn union(self, other: FieldAccessFlags) -> FieldAccessFlags
The bitwise or (|) of the bits in two flags values.
Sourcepub const fn difference(self, other: FieldAccessFlags) -> FieldAccessFlags
pub const fn difference(self, other: FieldAccessFlags) -> FieldAccessFlags
The intersection of a source flags value with the complement of a target flags
value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Sourcepub const fn symmetric_difference(
self,
other: FieldAccessFlags,
) -> FieldAccessFlags
pub const fn symmetric_difference( self, other: FieldAccessFlags, ) -> FieldAccessFlags
The bitwise exclusive-or (^) of the bits in two flags values.
Sourcepub const fn complement(self) -> FieldAccessFlags
pub const fn complement(self) -> FieldAccessFlags
The bitwise negation (!) of the bits in a flags value, truncating the result.
Source§impl FieldAccessFlags
impl FieldAccessFlags
Sourcepub const fn iter(&self) -> Iter<FieldAccessFlags>
pub const fn iter(&self) -> Iter<FieldAccessFlags>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
Sourcepub const fn iter_names(&self) -> IterNames<FieldAccessFlags>
pub const fn iter_names(&self) -> IterNames<FieldAccessFlags>
Yield a set of contained named flags values.
This method is like iter, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Source§impl FieldAccessFlags
impl FieldAccessFlags
Sourcepub fn from_bytes(
bytes: &mut Cursor<Vec<u8>>,
) -> Result<FieldAccessFlags, Error>
pub fn from_bytes( bytes: &mut Cursor<Vec<u8>>, ) -> Result<FieldAccessFlags, Error>
Deserialize the FieldAccessFlags from bytes.
Reads a u16 value from the given cursor in big-endian order and constructs
a FieldAccessFlags instance from it.
§Errors
Should not occur; reserved for future use.
§Examples
use std::io::Cursor;
use ristretto_classfile::FieldAccessFlags;
// Create a byte buffer representing a public static field
let access_flags: u16 = 0x0009; // PUBLIC | STATIC
let mut bytes = Cursor::new(access_flags.to_be_bytes().to_vec());
// Parse the access flags
let flags = FieldAccessFlags::from_bytes(&mut bytes)?;
assert!(flags.contains(FieldAccessFlags::PUBLIC));
assert!(flags.contains(FieldAccessFlags::STATIC));Sourcepub fn to_bytes(&self, bytes: &mut Vec<u8>) -> Result<(), Error>
pub fn to_bytes(&self, bytes: &mut Vec<u8>) -> Result<(), Error>
Serialize the FieldAccessFlags to bytes.
Writes the flags as a u16 value in big-endian order to the given byte vector.
§Examples
use ristretto_classfile::FieldAccessFlags;
// Create a flags instance representing a public final field
let flags = FieldAccessFlags::PUBLIC | FieldAccessFlags::FINAL;
// Serialize to bytes
let mut bytes = Vec::new();
flags.to_bytes(&mut bytes)?;
// Check the serialized value (0x0011 = PUBLIC | FINAL)
assert_eq!(bytes, [0x00, 0x11]);§Errors
Should not occur; reserved for future use.
Sourcepub fn as_code(&self) -> String
pub fn as_code(&self) -> String
Get the FieldAccessFlags as a string of Java modifiers.
This method converts the flags to a string representation that matches how the modifiers would appear in Java source code.
§Examples
use ristretto_classfile::FieldAccessFlags;
// Public static final field (common for constants)
let flags = FieldAccessFlags::PUBLIC | FieldAccessFlags::STATIC | FieldAccessFlags::FINAL;
assert_eq!("public static final", flags.as_code());
// Private volatile field
let flags = FieldAccessFlags::PRIVATE | FieldAccessFlags::VOLATILE;
assert_eq!("private volatile", flags.as_code());
// Flags without Java modifiers return empty strings
assert_eq!("", FieldAccessFlags::empty().as_code());Trait Implementations§
Source§impl Binary for FieldAccessFlags
impl Binary for FieldAccessFlags
Source§impl BitAnd for FieldAccessFlags
impl BitAnd for FieldAccessFlags
Source§fn bitand(self, other: FieldAccessFlags) -> FieldAccessFlags
fn bitand(self, other: FieldAccessFlags) -> FieldAccessFlags
The bitwise and (&) of the bits in two flags values.
Source§type Output = FieldAccessFlags
type Output = FieldAccessFlags
& operator.Source§impl BitAndAssign for FieldAccessFlags
impl BitAndAssign for FieldAccessFlags
Source§fn bitand_assign(&mut self, other: FieldAccessFlags)
fn bitand_assign(&mut self, other: FieldAccessFlags)
The bitwise and (&) of the bits in two flags values.
Source§impl BitOr for FieldAccessFlags
impl BitOr for FieldAccessFlags
Source§fn bitor(self, other: FieldAccessFlags) -> FieldAccessFlags
fn bitor(self, other: FieldAccessFlags) -> FieldAccessFlags
The bitwise or (|) of the bits in two flags values.
Source§type Output = FieldAccessFlags
type Output = FieldAccessFlags
| operator.Source§impl BitOrAssign for FieldAccessFlags
impl BitOrAssign for FieldAccessFlags
Source§fn bitor_assign(&mut self, other: FieldAccessFlags)
fn bitor_assign(&mut self, other: FieldAccessFlags)
The bitwise or (|) of the bits in two flags values.
Source§impl BitXor for FieldAccessFlags
impl BitXor for FieldAccessFlags
Source§fn bitxor(self, other: FieldAccessFlags) -> FieldAccessFlags
fn bitxor(self, other: FieldAccessFlags) -> FieldAccessFlags
The bitwise exclusive-or (^) of the bits in two flags values.
Source§type Output = FieldAccessFlags
type Output = FieldAccessFlags
^ operator.Source§impl BitXorAssign for FieldAccessFlags
impl BitXorAssign for FieldAccessFlags
Source§fn bitxor_assign(&mut self, other: FieldAccessFlags)
fn bitxor_assign(&mut self, other: FieldAccessFlags)
The bitwise exclusive-or (^) of the bits in two flags values.
Source§impl Clone for FieldAccessFlags
impl Clone for FieldAccessFlags
Source§fn clone(&self) -> FieldAccessFlags
fn clone(&self) -> FieldAccessFlags
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for FieldAccessFlags
impl Debug for FieldAccessFlags
Source§impl Default for FieldAccessFlags
impl Default for FieldAccessFlags
Source§fn default() -> FieldAccessFlags
fn default() -> FieldAccessFlags
Creates a new FieldAccessFlags with no flags set.
§Examples
use ristretto_classfile::FieldAccessFlags;
let flags = FieldAccessFlags::default();
assert!(flags.is_empty());
assert_eq!(0, flags.bits());Source§impl Display for FieldAccessFlags
impl Display for FieldAccessFlags
Source§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats the FieldAccessFlags as a string showing the hexadecimal value and the individual flag
constants.
§Examples
use ristretto_classfile::FieldAccessFlags;
// Public static field
let flags = FieldAccessFlags::PUBLIC | FieldAccessFlags::STATIC;
assert_eq!("(0x0009) ACC_PUBLIC, ACC_STATIC", flags.to_string());
// Private final field
let flags = FieldAccessFlags::PRIVATE | FieldAccessFlags::FINAL;
assert_eq!("(0x0012) ACC_PRIVATE, ACC_FINAL", flags.to_string());Source§impl Extend<FieldAccessFlags> for FieldAccessFlags
impl Extend<FieldAccessFlags> for FieldAccessFlags
Source§fn extend<T>(&mut self, iterator: T)where
T: IntoIterator<Item = FieldAccessFlags>,
fn extend<T>(&mut self, iterator: T)where
T: IntoIterator<Item = FieldAccessFlags>,
The bitwise or (|) of the bits in each flags value.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl Flags for FieldAccessFlags
impl Flags for FieldAccessFlags
Source§const FLAGS: &'static [Flag<FieldAccessFlags>]
const FLAGS: &'static [Flag<FieldAccessFlags>]
Source§fn from_bits_retain(bits: u16) -> FieldAccessFlags
fn from_bits_retain(bits: u16) -> FieldAccessFlags
Source§fn contains_unknown_bits(&self) -> bool
fn contains_unknown_bits(&self) -> bool
true if any unknown bits are set.Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn iter_defined_names() -> IterDefinedNames<Self>
fn iter_defined_names() -> IterDefinedNames<Self>
Self::FLAGS.Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|) of the bits in two flags values.Source§fn remove(&mut self, other: Self)where
Self: Sized,
fn remove(&mut self, other: Self)where
Self: Sized,
&!). Read moreSource§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^) of the bits in two flags values.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&) of the bits in two flags values.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
&!). Read moreSource§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^) of the bits in two flags values.Source§fn complement(self) -> Self
fn complement(self) -> Self
!) of the bits in a flags value, truncating the result.Source§impl FromIterator<FieldAccessFlags> for FieldAccessFlags
impl FromIterator<FieldAccessFlags> for FieldAccessFlags
Source§fn from_iter<T>(iterator: T) -> FieldAccessFlagswhere
T: IntoIterator<Item = FieldAccessFlags>,
fn from_iter<T>(iterator: T) -> FieldAccessFlagswhere
T: IntoIterator<Item = FieldAccessFlags>,
The bitwise or (|) of the bits in each flags value.
Source§impl IntoIterator for FieldAccessFlags
impl IntoIterator for FieldAccessFlags
Source§type Item = FieldAccessFlags
type Item = FieldAccessFlags
Source§type IntoIter = Iter<FieldAccessFlags>
type IntoIter = Iter<FieldAccessFlags>
Source§fn into_iter(self) -> <FieldAccessFlags as IntoIterator>::IntoIter
fn into_iter(self) -> <FieldAccessFlags as IntoIterator>::IntoIter
Source§impl LowerHex for FieldAccessFlags
impl LowerHex for FieldAccessFlags
Source§impl Not for FieldAccessFlags
impl Not for FieldAccessFlags
Source§fn not(self) -> FieldAccessFlags
fn not(self) -> FieldAccessFlags
The bitwise negation (!) of the bits in a flags value, truncating the result.
Source§type Output = FieldAccessFlags
type Output = FieldAccessFlags
! operator.Source§impl Octal for FieldAccessFlags
impl Octal for FieldAccessFlags
Source§impl PartialEq for FieldAccessFlags
impl PartialEq for FieldAccessFlags
Source§impl Sub for FieldAccessFlags
impl Sub for FieldAccessFlags
Source§fn sub(self, other: FieldAccessFlags) -> FieldAccessFlags
fn sub(self, other: FieldAccessFlags) -> FieldAccessFlags
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Source§type Output = FieldAccessFlags
type Output = FieldAccessFlags
- operator.Source§impl SubAssign for FieldAccessFlags
impl SubAssign for FieldAccessFlags
Source§fn sub_assign(&mut self, other: FieldAccessFlags)
fn sub_assign(&mut self, other: FieldAccessFlags)
The intersection of a source flags value with the complement of a target flags value (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Source§impl UpperHex for FieldAccessFlags
impl UpperHex for FieldAccessFlags
impl Copy for FieldAccessFlags
impl Eq for FieldAccessFlags
impl StructuralPartialEq for FieldAccessFlags
Auto Trait Implementations§
impl Freeze for FieldAccessFlags
impl RefUnwindSafe for FieldAccessFlags
impl Send for FieldAccessFlags
impl Sync for FieldAccessFlags
impl Unpin for FieldAccessFlags
impl UnwindSafe for FieldAccessFlags
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.