rusticity_term/ecr/
image.rs1use crate::common::{format_iso_timestamp, ColumnTrait, UTC_TIMESTAMP_WIDTH};
2use crate::ui::table::Column as TableColumn;
3use ratatui::prelude::*;
4
5#[derive(Debug, Clone)]
6pub struct Image {
7 pub tag: String,
8 pub artifact_type: String,
9 pub pushed_at: String,
10 pub size_bytes: i64,
11 pub uri: String,
12 pub digest: String,
13 pub last_pull_time: String,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq)]
17pub enum Column {
18 Tag,
19 ArtifactType,
20 PushedAt,
21 SizeMb,
22 Uri,
23 Digest,
24 LastPullTime,
25}
26
27impl Column {
28 pub fn all() -> Vec<Column> {
29 vec![
30 Column::Tag,
31 Column::ArtifactType,
32 Column::PushedAt,
33 Column::SizeMb,
34 Column::Uri,
35 Column::Digest,
36 Column::LastPullTime,
37 ]
38 }
39}
40
41impl ColumnTrait for Column {
42 fn name(&self) -> &'static str {
43 match self {
44 Column::Tag => "Image tag",
45 Column::ArtifactType => "Artifact type",
46 Column::PushedAt => "Pushed at",
47 Column::SizeMb => "Size (MB)",
48 Column::Uri => "Image URI",
49 Column::Digest => "Digest",
50 Column::LastPullTime => "Last recorded pull time",
51 }
52 }
53}
54
55impl TableColumn<Image> for Column {
56 fn name(&self) -> &str {
57 ColumnTrait::name(self)
58 }
59
60 fn width(&self) -> u16 {
61 ColumnTrait::name(self).len().max(match self {
62 Column::Tag => 20,
63 Column::ArtifactType => 20,
64 Column::PushedAt => UTC_TIMESTAMP_WIDTH as usize,
65 Column::SizeMb => 12,
66 Column::Uri => 50,
67 Column::Digest => 20,
68 Column::LastPullTime => UTC_TIMESTAMP_WIDTH as usize,
69 }) as u16
70 }
71
72 fn render(&self, item: &Image) -> (String, Style) {
73 let text = match self {
74 Column::Tag => item.tag.clone(),
75 Column::ArtifactType => item.artifact_type.clone(),
76 Column::PushedAt => format_iso_timestamp(&item.pushed_at),
77 Column::SizeMb => crate::common::format_bytes(item.size_bytes),
78 Column::Uri => item.uri.clone(),
79 Column::Digest => item.digest.clone(),
80 Column::LastPullTime => format_iso_timestamp(&item.last_pull_time),
81 };
82 (text, Style::default())
83 }
84}