diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..31000a2 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,22 @@ +name: Rust + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Build + run: cargo build --verbose + - name: Run tests + run: cargo test --verbose diff --git a/Cargo.toml b/Cargo.toml index 851c6a7..a4cd622 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "granges2" +name = "granges" version = "0.1.0" edition = "2021" diff --git a/src/lib.rs b/src/lib.rs index 4c23703..60177cb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ // Copyright (2024) Vince Buffalo -#![crate_name = "granges2"] +#![crate_name = "granges"] #![doc(html_root_url = "https://docs.rs/granges/")] pub mod error; diff --git a/src/ranges/coitrees.rs b/src/ranges/coitrees.rs index eb23133..c9311f4 100644 --- a/src/ranges/coitrees.rs +++ b/src/ranges/coitrees.rs @@ -1,6 +1,6 @@ use coitrees::{BasicCOITree, GenericInterval, Interval, IntervalNode, IntervalTree}; -use crate::{error::GRangesError, iterators::RangesIterable, traits::RangeContainer, Position}; +use crate::{error::GRangesError, iterators::{RangesIterable, RangesIntoIterable}, traits::RangeContainer, Position}; use super::{validate_range, vec::VecRanges, RangeEmpty, RangeIndexed}; @@ -121,6 +121,14 @@ impl From> for RangeIndexed { } } + +/// +/// # Developer Notes +/// +/// Internally, the [`coitrees`] iterator is over their interval type. +/// Their iterator does not consume, but we need an owned (or copyable, +/// as is case here) type to map out. Thus, we need this odd variant of +/// an iterator that doesn't return references and does not consume. impl RangesIterable for COITrees { fn iter_ranges(&self) -> Box + '_> { let iter = self.ranges.iter(); diff --git a/src/ranges/vec.rs b/src/ranges/vec.rs index 26afd70..e31b082 100644 --- a/src/ranges/vec.rs +++ b/src/ranges/vec.rs @@ -1,6 +1,7 @@ use crate::{error::GRangesError, traits::RangeContainer, Position}; - +use crate::iterators::{RangesIterable, RangesIntoIterable}; use super::{validate_range, RangeEmpty, RangeIndexed}; + pub type VecRangesIndexed = VecRanges; pub type VecRangesEmpty = VecRanges; @@ -45,3 +46,11 @@ impl RangeContainer for VecRanges { self.ranges.len() } } + + +impl RangesIntoIterable for VecRanges { + fn into_iter_ranges(self) -> Box> { + let iter = self.ranges.into_iter(); + Box::new(iter) + } +}