pub trait BufferManager: Send + Sync {
// Required methods
fn get(&self, id: BufferId) -> Option<Arc<RwLock<Buffer>>>;
fn create(&self) -> BufferId;
fn register(&self, buffer: Buffer) -> BufferId;
fn unregister(&self, id: BufferId) -> Result<Buffer, BufferError>;
fn list(&self) -> Vec<BufferId>;
fn count(&self) -> usize;
}Expand description
Buffer manager interface for kernel-driver communication.
This trait defines how buffers are stored and retrieved. The kernel provides pure storage mechanisms, while drivers implement I/O operations.
§Design Philosophy
- No I/O operations: No
open()/save()methods - VFS driver handles these - No focus tracking: Active buffer tracking is a runtime/window concern
- Thread-safe: Uses
Arc<RwLock<Buffer>>for concurrent access - Kernel purity: Pure mechanisms only, no external dependencies
§Example
ⓘ
use reovim_kernel::api::v1::{BufferManager, Buffer, BufferId};
struct SimpleBufferManager { /* ... */ }
impl BufferManager for SimpleBufferManager {
fn get(&self, id: BufferId) -> Option<Arc<RwLock<Buffer>>> {
// Implementation
}
// ... other methods
}Required Methods§
Sourcefn get(&self, id: BufferId) -> Option<Arc<RwLock<Buffer>>>
fn get(&self, id: BufferId) -> Option<Arc<RwLock<Buffer>>>
Get buffer by ID.
Returns None if the buffer does not exist.
Sourcefn create(&self) -> BufferId
fn create(&self) -> BufferId
Create a new empty buffer.
Returns the ID of the newly created buffer.
Sourcefn register(&self, buffer: Buffer) -> BufferId
fn register(&self, buffer: Buffer) -> BufferId
Register an existing buffer (used by drivers after loading).
Returns the ID assigned to the registered buffer.
Sourcefn unregister(&self, id: BufferId) -> Result<Buffer, BufferError>
fn unregister(&self, id: BufferId) -> Result<Buffer, BufferError>
Unregister buffer, returning ownership.
§Errors
Returns Err(BufferError::NotFound) if the buffer does not exist.