mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-21 05:06:29 +00:00
* Add Glob wrapper type with better serialization * Introduce PathIgnoreRule struct * Implement equality for Glob type * Add PathIgnoreRule to InstanceContext * Implement glob ignores in directory middleware * Fix up filters * Use Iterator::all instead of loop * Add project-level configuration for glob ignores * Add test project for glob ignores * Wire up project file and snapshots to make glob ignores work * Better codepaths for adding ignore rules with empty iterators * Add test for globs inherited from parent projects * Add test details, support glob ignores in nested projects * Add feature flag for globs * Switch to use ExactSizeIterator instead of size_hint * Remove glob visitor
51 lines
1.2 KiB
Rust
51 lines
1.2 KiB
Rust
//! Wrapper around globset's Glob type that has better serialization
|
|
//! characteristics by coupling Glob and GlobMatcher into a single type.
|
|
|
|
use std::path::Path;
|
|
|
|
use globset::{Glob as InnerGlob, GlobMatcher};
|
|
use serde::{de::Error as _, Deserialize, Deserializer, Serialize, Serializer};
|
|
|
|
pub use globset::Error;
|
|
|
|
#[derive(Debug, Clone)]
|
|
pub struct Glob {
|
|
inner: InnerGlob,
|
|
matcher: GlobMatcher,
|
|
}
|
|
|
|
impl Glob {
|
|
pub fn new(glob: &str) -> Result<Self, Error> {
|
|
let inner = InnerGlob::new(glob)?;
|
|
let matcher = inner.compile_matcher();
|
|
|
|
Ok(Glob { inner, matcher })
|
|
}
|
|
|
|
pub fn is_match<P: AsRef<Path>>(&self, path: P) -> bool {
|
|
self.matcher.is_match(path)
|
|
}
|
|
}
|
|
|
|
impl PartialEq for Glob {
|
|
fn eq(&self, other: &Self) -> bool {
|
|
self.inner == other.inner
|
|
}
|
|
}
|
|
|
|
impl Eq for Glob {}
|
|
|
|
impl Serialize for Glob {
|
|
fn serialize<S: Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
|
|
serializer.serialize_str(self.inner.glob())
|
|
}
|
|
}
|
|
|
|
impl<'de> Deserialize<'de> for Glob {
|
|
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
|
|
let glob = <&str as Deserialize>::deserialize(deserializer)?;
|
|
|
|
Glob::new(glob).map_err(D::Error::custom)
|
|
}
|
|
}
|