Add ServerReference::resolve_lazy

This commit is contained in:
Leonard Steppy 2024-12-11 21:27:13 +01:00
parent 03b7a6f67f
commit e203ed1dbb
2 changed files with 12 additions and 2 deletions

View File

@ -5,3 +5,4 @@ edition = "2021"
[dependencies]
clap = { version = "4.5.23", features = ["derive"] }
replace_with = "0.1.7"

View File

@ -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(),