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