1+ use jane_eyre:: eyre:: { self , OptionExt } ;
12use serde:: { Deserialize , Serialize } ;
23
34use crate :: { TOML , units:: MemorySize } ;
@@ -20,8 +21,24 @@ pub enum ImageType {
2021}
2122
2223impl Profile {
23- pub fn profile_guest_name ( & self ) -> String {
24- format ! ( "{}" , self . profile_name)
24+ pub fn snapshot_path_slug ( & self , snapshot_name : & str ) -> String {
25+ format ! ( "{}@{snapshot_name}" , self . profile_name)
26+ }
27+
28+ pub fn template_guest_name ( & self , snapshot_name : & str ) -> String {
29+ format ! (
30+ "{}-{}@{snapshot_name}" ,
31+ TOML . libvirt_template_guest_prefix( ) ,
32+ self . profile_name
33+ )
34+ }
35+
36+ pub fn rebuild_guest_name ( & self , snapshot_name : & str ) -> String {
37+ format ! (
38+ "{}-{}@{snapshot_name}" ,
39+ TOML . libvirt_rebuild_guest_prefix( ) ,
40+ self . profile_name
41+ )
2542 }
2643
2744 pub fn runner_guest_name ( & self , id : usize ) -> String {
@@ -33,3 +50,23 @@ impl Profile {
3350 )
3451 }
3552}
53+
54+ pub fn parse_template_guest_name ( template_guest_name : & str ) -> eyre:: Result < ( & str , & str ) > {
55+ let prefix = format ! ( "{}-" , TOML . libvirt_template_guest_prefix( ) ) ;
56+ let ( profile_key, snapshot_name) = template_guest_name
57+ . strip_prefix ( & prefix)
58+ . ok_or_eyre ( "Failed to strip template guest prefix" ) ?
59+ . split_once ( "@" )
60+ . ok_or_eyre ( "Failed to split snapshot path slug into profile key and snapshot name" ) ?;
61+ Ok ( ( profile_key, snapshot_name) )
62+ }
63+
64+ pub fn parse_rebuild_guest_name ( rebuild_guest_name : & str ) -> eyre:: Result < ( & str , & str ) > {
65+ let prefix = format ! ( "{}-" , TOML . libvirt_rebuild_guest_prefix( ) ) ;
66+ let ( profile_key, snapshot_name) = rebuild_guest_name
67+ . strip_prefix ( & prefix)
68+ . ok_or_eyre ( "Failed to strip rebuild guest prefix" ) ?
69+ . split_once ( "@" )
70+ . ok_or_eyre ( "Failed to split snapshot path slug into profile key and snapshot name" ) ?;
71+ Ok ( ( profile_key, snapshot_name) )
72+ }
0 commit comments