mirror of https://github.com/Trivernis/nenv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
905 B
Rust
39 lines
905 B
Rust
1 year ago
|
use async_trait::async_trait;
|
||
|
|
||
|
use futures::future;
|
||
|
use miette::Result;
|
||
|
mod env_detector;
|
||
|
mod package_json_detector;
|
||
|
mod version_file_detector;
|
||
|
|
||
|
use crate::repository::NodeVersion;
|
||
|
|
||
|
use self::{
|
||
|
env_detector::EnvDetector, package_json_detector::PackageJsonDetector,
|
||
|
version_file_detector::VersionFileDetector,
|
||
|
};
|
||
|
|
||
|
#[async_trait]
|
||
|
pub trait VersionDetector {
|
||
|
async fn detect_version() -> Result<Option<NodeVersion>>;
|
||
|
}
|
||
|
|
||
|
pub struct ParallelDetector;
|
||
|
|
||
|
#[async_trait]
|
||
|
impl VersionDetector for ParallelDetector {
|
||
|
async fn detect_version() -> Result<Option<NodeVersion>> {
|
||
|
let version = future::join_all(vec![
|
||
|
VersionFileDetector::detect_version(),
|
||
|
PackageJsonDetector::detect_version(),
|
||
|
EnvDetector::detect_version(),
|
||
|
])
|
||
|
.await
|
||
|
.into_iter()
|
||
|
.filter_map(Result::ok)
|
||
|
.find_map(|v| v);
|
||
|
|
||
|
Ok(version)
|
||
|
}
|
||
|
}
|