Skip to content
Merged
6 changes: 3 additions & 3 deletions examples/network_streaming.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ use std::io::{BufReader, BufWriter};
use std::net::{TcpListener, TcpStream};
use std::thread;

use binseq::bq::{BinseqHeader, BinseqHeaderBuilder, StreamReader, StreamWriterBuilder};
use binseq::bq::{FileHeader, FileHeaderBuilder, StreamReader, StreamWriterBuilder};
use binseq::{BinseqRecord, Policy, Result};

fn server(header: BinseqHeader, sequence: &[u8]) -> Result<()> {
fn server(header: FileHeader, sequence: &[u8]) -> Result<()> {
// Create a listener on localhost:3000
let listener = TcpListener::bind("127.0.0.1:3000").expect("Failed to bind to address");
println!("Server listening on 127.0.0.1:3000");
Expand Down Expand Up @@ -80,7 +80,7 @@ fn client() -> Result<()> {

fn main() -> Result<()> {
// Create a header for sequences of length 100
let header = BinseqHeaderBuilder::new().slen(100).build()?;
let header = FileHeaderBuilder::new().slen(100).build()?;

// Create some example sequence data
let sequence = b"ACGT".repeat(25); // 100 nucleotides
Expand Down
4 changes: 2 additions & 2 deletions examples/streaming.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use std::io::{BufReader, Cursor};

use binseq::bq::{BinseqHeaderBuilder, StreamReader, StreamWriterBuilder};
use binseq::bq::{FileHeaderBuilder, StreamReader, StreamWriterBuilder};
use binseq::{BinseqRecord, Policy, Result};

fn main() -> Result<()> {
// Create a header for sequences of length 100
let header = BinseqHeaderBuilder::new().slen(100).build()?;
let header = FileHeaderBuilder::new().slen(100).build()?;

// Create some example sequence data
let sequence = b"ACGT".repeat(25); // 100 nucleotides
Expand Down
28 changes: 14 additions & 14 deletions src/bq/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,22 +32,22 @@ pub const SIZE_HEADER: usize = 32;
pub const RESERVED: [u8; 17] = [42; 17];

#[derive(Debug, Clone, Copy)]
pub struct BinseqHeaderBuilder {
pub struct FileHeaderBuilder {
slen: Option<u32>,
xlen: Option<u32>,
bitsize: Option<BitSize>,
flags: Option<bool>,
}
impl Default for BinseqHeaderBuilder {
impl Default for FileHeaderBuilder {
fn default() -> Self {
Self::new()
}
}

impl BinseqHeaderBuilder {
impl FileHeaderBuilder {
#[must_use]
pub fn new() -> Self {
BinseqHeaderBuilder {
FileHeaderBuilder {
slen: None,
xlen: None,
bitsize: None,
Expand All @@ -74,8 +74,8 @@ impl BinseqHeaderBuilder {
self.flags = Some(flags);
self
}
pub fn build(self) -> Result<BinseqHeader> {
Ok(BinseqHeader {
pub fn build(self) -> Result<FileHeader> {
Ok(FileHeader {
magic: MAGIC,
format: FORMAT,
slen: if let Some(slen) = self.slen {
Expand All @@ -93,13 +93,13 @@ impl BinseqHeaderBuilder {

/// Header structure for binary sequence files
///
/// The `BinseqHeader` contains metadata about the binary sequence data stored in a file,
/// The `FileHeader` contains metadata about the binary sequence data stored in a file,
/// including format information, sequence lengths, and space for future extensions.
///
/// The total size of this structure is 32 bytes, with a fixed layout to ensure
/// consistent reading and writing across different platforms.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BinseqHeader {
pub struct FileHeader {
/// Magic number to identify the file format
///
/// 4 bytes
Expand Down Expand Up @@ -135,7 +135,7 @@ pub struct BinseqHeader {
/// 17 bytes
pub reserved: [u8; 17],
}
impl BinseqHeader {
impl FileHeader {
/// Creates a new header with the specified sequence length
///
/// This constructor initializes a standard header with the given sequence length,
Expand All @@ -150,7 +150,7 @@ impl BinseqHeader {
///
/// # Returns
///
/// A new `BinseqHeader` instance
/// A new `FileHeader` instance
#[must_use]
pub fn new(bits: BitSize, slen: u32, flags: bool) -> Self {
Self {
Expand Down Expand Up @@ -178,7 +178,7 @@ impl BinseqHeader {
///
/// # Returns
///
/// A new `BinseqHeader` instance with extended sequence information
/// A new `FileHeader` instance with extended sequence information
#[must_use]
pub fn new_extended(bits: BitSize, slen: u32, xlen: u32, flags: bool) -> Self {
Self {
Expand Down Expand Up @@ -214,7 +214,7 @@ impl BinseqHeader {
///
/// # Returns
///
/// * `Ok(BinseqHeader)` - A valid header parsed from the buffer
/// * `Ok(FileHeader)` - A valid header parsed from the buffer
/// * `Err(Error)` - If the buffer contains invalid header data
///
/// # Errors
Expand Down Expand Up @@ -266,7 +266,7 @@ impl BinseqHeader {
///
/// # Returns
///
/// * `Ok(BinseqHeader)` - A valid header parsed from the buffer
/// * `Ok(FileHeader)` - A valid header parsed from the buffer
/// * `Err(Error)` - If the buffer is too small or contains invalid header data
///
/// # Errors
Expand Down Expand Up @@ -324,7 +324,7 @@ impl BinseqHeader {
///
/// # Returns
///
/// * `Ok(BinseqHeader)` - A valid header read from the reader
/// * `Ok(FileHeader)` - A valid header read from the reader
/// * `Err(Error)` - If reading from the reader failed or the header data is invalid
///
/// # Errors
Expand Down
30 changes: 15 additions & 15 deletions src/bq/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
//!
//! *.bq files are BINSEQ variants for **fixed-length** records and **does not support quality scores**.
//!
//! For variable-length records and optional quality scores use the [`vbq`](crate::vbq) module.
//! For variable-length records and optional quality scores use the [`cbq`](crate::cbq) or [`vbq`](crate::vbq) modules.
//!
//! This module contains the utilities for reading, writing, and interacting with BINSEQ files.
//! This module contains the utilities for reading, writing, and interacting with BQ files.
//!
//! For detailed information on the file format, see our [paper](https://www.biorxiv.org/content/10.1101/2025.04.08.647863v1).
//!
Expand Down Expand Up @@ -46,11 +46,11 @@
//! // Create an in-memory buffer for output
//! let output_handle = Cursor::new(Vec::new());
//!
//! // Initialize our BINSEQ header (64 bp, only primary)
//! let header = bq::BinseqHeaderBuilder::new().slen(64).build().unwrap();
//! // Initialize our BQ header (64 bp, only primary)
//! let header = bq::FileHeaderBuilder::new().slen(64).build().unwrap();
//!
//! // Initialize our BINSEQ writer
//! let mut writer = bq::BinseqWriterBuilder::default()
//! // Initialize our BQ writer
//! let mut writer = bq::WriterBuilder::default()
//! .header(header)
//! .build(output_handle)
//! .unwrap();
Expand Down Expand Up @@ -79,11 +79,11 @@
//! // Create an in-memory buffer for output
//! let output_handle = Cursor::new(Vec::new());
//!
//! // Initialize our BINSEQ header (64 bp and 128bp)
//! let header = bq::BinseqHeaderBuilder::new().slen(64).xlen(128).build().unwrap();
//! // Initialize our BQ header (64 bp and 128bp)
//! let header = bq::FileHeaderBuilder::new().slen(64).xlen(128).build().unwrap();
//!
//! // Initialize our BINSEQ writer
//! let mut writer = bq::BinseqWriterBuilder::default()
//! // Initialize our BQ writer
//! let mut writer = bq::WriterBuilder::default()
//! .header(header)
//! .build(output_handle)
//! .unwrap();
Expand All @@ -109,12 +109,12 @@
//!
//! ```
//! use binseq::{Policy, Result, BinseqRecord, SequencingRecordBuilder};
//! use binseq::bq::{BinseqHeaderBuilder, StreamReader, StreamWriterBuilder};
//! use binseq::bq::{FileHeaderBuilder, StreamReader, StreamWriterBuilder};
//! use std::io::{BufReader, Cursor};
//!
//! fn main() -> Result<()> {
//! // Create a header for sequences of length 100
//! let header = BinseqHeaderBuilder::new().slen(100).build()?;
//! let header = FileHeaderBuilder::new().slen(100).build()?;
//!
//! // Create a stream writer
//! let mut writer = StreamWriterBuilder::default()
Expand Down Expand Up @@ -150,7 +150,7 @@
//!
//! ## BQ file format
//!
//! A BINSEQ file consists of two sections:
//! A BQ file consists of two sections:
//!
//! 1. Fixed-size header (32 bytes)
//! 2. Record data section
Expand Down Expand Up @@ -241,6 +241,6 @@ mod header;
mod reader;
mod writer;

pub use header::{BinseqHeader, BinseqHeaderBuilder, SIZE_HEADER};
pub use header::{FileHeader, FileHeaderBuilder, SIZE_HEADER};
pub use reader::{MmapReader, RefRecord, StreamReader};
pub use writer::{BinseqWriter, BinseqWriterBuilder, Encoder, StreamWriter, StreamWriterBuilder};
pub use writer::{Encoder, StreamWriter, StreamWriterBuilder, Writer, WriterBuilder};
20 changes: 10 additions & 10 deletions src/bq/reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use bitnuc::BitSize;
use bytemuck::cast_slice;
use memmap2::Mmap;

use super::header::{BinseqHeader, SIZE_HEADER};
use super::header::{FileHeader, SIZE_HEADER};
use crate::{
BinseqRecord, DEFAULT_QUALITY_SCORE, Error, ParallelProcessor, ParallelReader,
error::{ReadError, Result},
Expand Down Expand Up @@ -298,12 +298,12 @@ impl RecordConfig {
///
/// # Arguments
///
/// * `header` - A reference to a `BinseqHeader` containing sequence lengths
/// * `header` - A reference to a `FileHeader` containing sequence lengths
///
/// # Returns
///
/// A new `RecordConfig` instance with the sequence lengths from the header
pub fn from_header(header: &BinseqHeader) -> Self {
pub fn from_header(header: &FileHeader) -> Self {
Self::new(
header.slen as usize,
header.xlen as usize,
Expand Down Expand Up @@ -411,7 +411,7 @@ pub struct MmapReader {
mmap: Arc<Mmap>,

/// Binary sequence file header containing format information
header: BinseqHeader,
header: FileHeader,

/// Configuration defining the layout of records in the file
config: RecordConfig,
Expand Down Expand Up @@ -456,7 +456,7 @@ impl MmapReader {
let mmap = unsafe { Mmap::map(&file)? };

// Read header from mapped memory
let header = BinseqHeader::from_buffer(&mmap)?;
let header = FileHeader::from_buffer(&mmap)?;

// Record configuraration
let config = RecordConfig::from_header(&header);
Expand Down Expand Up @@ -491,7 +491,7 @@ impl MmapReader {
///
/// The header contains format information and sequence length specifications.
#[must_use]
pub fn header(&self) -> BinseqHeader {
pub fn header(&self) -> FileHeader {
self.header
}

Expand Down Expand Up @@ -580,7 +580,7 @@ pub struct StreamReader<R: Read> {
reader: R,

/// Binary sequence file header containing format information
header: Option<BinseqHeader>,
header: Option<FileHeader>,

/// Configuration defining the layout of records in the file
config: Option<RecordConfig>,
Expand Down Expand Up @@ -659,7 +659,7 @@ impl<R: Read> StreamReader<R> {
///
/// # Returns
///
/// * `Ok(&BinseqHeader)` - A reference to the validated header
/// * `Ok(&FileHeader)` - A reference to the validated header
/// * `Err(Error)` - If reading or validating the header fails
///
/// # Panics
Expand All @@ -672,7 +672,7 @@ impl<R: Read> StreamReader<R> {
/// * There is an I/O error when reading from the source
/// * The header data is invalid
/// * End of stream is reached before the full header can be read
pub fn read_header(&mut self) -> Result<&BinseqHeader> {
pub fn read_header(&mut self) -> Result<&FileHeader> {
if self.header.is_some() {
return Ok(self
.header
Expand All @@ -687,7 +687,7 @@ impl<R: Read> StreamReader<R> {

// Parse header
let header_slice = &self.buffer[self.buffer_pos..self.buffer_pos + SIZE_HEADER];
let header = BinseqHeader::from_buffer(header_slice)?;
let header = FileHeader::from_buffer(header_slice)?;

self.header = Some(header);
self.config = Some(RecordConfig::from_header(&header));
Expand Down
Loading