Skip to content

Commit 9bbe275

Browse files
fix: use macro to simplify defining Either type (#9)
1 parent ce59713 commit 9bbe275

4 files changed

Lines changed: 27 additions & 20 deletions

File tree

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub mod sam;
22
pub mod trie;
3+
pub mod utils;
34

45
use pyo3::prelude::*;
56

src/sam.rs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
extern crate general_sam as general_sam_rs;
22

33
use crate::trie::Trie;
4-
5-
use std::{str::from_utf8, sync::Arc};
6-
7-
use either::{
8-
for_both, Either as CharOrByte,
9-
{Either::Left as CharSide, Either::Right as ByteSide},
10-
};
11-
use pyo3::{prelude::*, types::PyDict};
4+
use crate::utils::{char_or_byte_type, for_both, ByteSide, CharSide};
125

136
use general_sam_rs::{sam as sam_rs, trie as trie_rs, trie_alike::TravelEvent};
7+
use pyo3::{prelude::*, types::PyDict};
8+
use std::{str::from_utf8, sync::Arc};
149

15-
type RustGeneralSAM = CharOrByte<sam_rs::GeneralSAM<char>, sam_rs::GeneralSAM<u8>>;
16-
type RustGeneralSAMState<'s> =
17-
CharOrByte<sam_rs::GeneralSAMState<'s, char>, sam_rs::GeneralSAMState<'s, u8>>;
10+
type RustGeneralSAM = char_or_byte_type!(sam_rs::GeneralSAM);
11+
type RustGeneralSAMState<'s> = char_or_byte_type!(sam_rs::GeneralSAMState; 's);
1812

1913
#[pyclass]
2014
pub struct GeneralSAM(pub Arc<RustGeneralSAM>);

src/trie.rs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
extern crate general_sam as general_sam_rs;
22

3-
use std::{convert::Infallible, str::from_utf8};
4-
5-
use either::{
6-
for_both, Either as CharOrByte,
7-
{Either::Left as CharSide, Either::Right as ByteSide},
8-
};
9-
use pyo3::prelude::*;
3+
use crate::utils::{char_or_byte_type, for_both, ByteSide, CharSide};
104

115
use general_sam_rs::{
126
trie as trie_rs,
137
trie_alike::{TravelEvent, TrieNodeAlike},
148
};
9+
use pyo3::prelude::*;
10+
use std::{convert::Infallible, str::from_utf8};
1511

16-
type RustTrie = CharOrByte<trie_rs::Trie<char>, trie_rs::Trie<u8>>;
17-
type RustTrieNode = CharOrByte<trie_rs::TrieNode<char>, trie_rs::TrieNode<u8>>;
12+
type RustTrie = char_or_byte_type!(trie_rs::Trie);
13+
type RustTrieNode = char_or_byte_type!(trie_rs::TrieNode);
1814

1915
#[pyclass]
2016
pub struct Trie(pub RustTrie);

src/utils.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
pub use either::{
2+
for_both, Either as CharOrByte,
3+
{Either::Left as CharSide, Either::Right as ByteSide},
4+
};
5+
6+
#[macro_export]
7+
macro_rules! char_or_byte_type {
8+
($( $name:ident )::+ $(; $( $life:lifetime ),* )?) => {
9+
$crate::utils::CharOrByte<
10+
$($name)::+ < $( $($life),* ,)? char>,
11+
$($name)::+ < $( $($life),* ,)? u8>,
12+
>
13+
};
14+
}
15+
16+
pub use char_or_byte_type;

0 commit comments

Comments
 (0)