beamcli 0.5.0

An Interface on top of the Teleport CLI.
Documentation
use anyhow::Result;
use std::io::Cursor;

use skim::{
    prelude::{SkimItemReader, SkimOptionsBuilder},
    Skim,
};

pub fn skim(items: String) -> Result<Option<String>> {
    let options = SkimOptionsBuilder::default()
        .height(Some("100%"))
        .multi(true)
        .build()
        .unwrap();

    let item_reader = SkimItemReader::default();
    let items = item_reader.of_bufread(Cursor::new(items));

    let selected_item = Skim::run_with(&options, Some(items))
        .map(|out| {
            if !out.is_abort {
                out.selected_items
                    .first()
                    .map(|item| item.text().to_string())
            } else {
                None
            }
        })
        .unwrap_or_else(|| None);
    Ok(selected_item)
}