Add ServerReference::resolve_lazy
This commit is contained in:
parent
03b7a6f67f
commit
e203ed1dbb
@ -5,3 +5,4 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
clap = { version = "4.5.23", features = ["derive"] }
|
||||
replace_with = "0.1.7"
|
||||
|
||||
13
src/main.rs
13
src/main.rs
@ -1,7 +1,9 @@
|
||||
use clap::{Parser, Subcommand, ValueEnum};
|
||||
use std::cell::LazyCell;
|
||||
use std::env;
|
||||
use std::error::Error;
|
||||
use std::fmt::{Display, Formatter};
|
||||
use std::ops::Deref;
|
||||
use std::path::PathBuf;
|
||||
use std::str::FromStr;
|
||||
|
||||
@ -63,11 +65,18 @@ enum ServerReference {
|
||||
}
|
||||
|
||||
impl ServerReference {
|
||||
//TODO lazy resolve method which gets a provider for configured servers
|
||||
pub fn resolve(self, configured_servers: &[Server]) -> Option<Server> {
|
||||
self.resolve_lazy(&mut LazyCell::new(|| configured_servers))
|
||||
}
|
||||
|
||||
pub fn resolve_lazy<S, F>(self, provider: &mut LazyCell<S, F>) -> Option<Server>
|
||||
where
|
||||
S: Deref<Target = [Server]>,
|
||||
F: FnOnce() -> S
|
||||
{
|
||||
match self {
|
||||
ServerReference::Resolved(server) => Some(server),
|
||||
ServerReference::Name(name) => configured_servers
|
||||
ServerReference::Name(name) => provider
|
||||
.iter()
|
||||
.find(|server| server.ssh_name == name)
|
||||
.cloned(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user