1- use cargo:: core:: manifest:: ManifestMetadata ;
2- use cargo:: core:: PackageId ;
31use std:: error:: Error ;
42use std:: fmt;
53
4+ use crate :: data:: Node ;
65use crate :: format:: parse:: { Parser , RawChunk } ;
76
87mod parse;
@@ -12,6 +11,7 @@ enum Chunk {
1211 Package ,
1312 License ,
1413 Repository ,
14+ Features ,
1515}
1616
1717pub struct Pattern ( Vec < Chunk > ) ;
@@ -26,6 +26,7 @@ impl Pattern {
2626 RawChunk :: Argument ( "p" ) => Chunk :: Package ,
2727 RawChunk :: Argument ( "l" ) => Chunk :: License ,
2828 RawChunk :: Argument ( "r" ) => Chunk :: Repository ,
29+ RawChunk :: Argument ( "f" ) => Chunk :: Features ,
2930 RawChunk :: Argument ( ref a) => {
3031 return Err ( format ! ( "unsupported pattern `{}`" , a) . into ( ) ) ;
3132 }
@@ -39,39 +40,41 @@ impl Pattern {
3940
4041 pub fn display < ' a > (
4142 & ' a self ,
42- package : & ' a PackageId ,
43- metadata : & ' a ManifestMetadata ,
43+ node : & ' a Node ,
4444 ) -> Display < ' a > {
4545 Display {
4646 pattern : self ,
47- package : package,
48- metadata : metadata,
47+ node,
4948 }
5049 }
5150}
5251
5352pub struct Display < ' a > {
5453 pattern : & ' a Pattern ,
55- package : & ' a PackageId ,
56- metadata : & ' a ManifestMetadata ,
54+ node : & ' a Node < ' a > ,
5755}
5856
5957impl < ' a > fmt:: Display for Display < ' a > {
6058 fn fmt ( & self , fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
6159 for chunk in & self . pattern . 0 {
6260 match * chunk {
6361 Chunk :: Raw ( ref s) => fmt. write_str ( s) ?,
64- Chunk :: Package => write ! ( fmt, "{}" , self . package ) ?,
62+ Chunk :: Package => write ! ( fmt, "{}" , self . node . id ) ?,
6563 Chunk :: License => {
66- if let Some ( ref license) = self . metadata . license {
64+ if let Some ( ref license) = self . node . metadata . license {
6765 write ! ( fmt, "{}" , license) ?
6866 }
6967 }
7068 Chunk :: Repository => {
71- if let Some ( ref repository) = self . metadata . repository {
69+ if let Some ( ref repository) = self . node . metadata . repository {
7270 write ! ( fmt, "{}" , repository) ?
7371 }
7472 }
73+ Chunk :: Features => {
74+ let mut features : Vec < _ > = self . node . features . iter ( ) . cloned ( ) . collect ( ) ;
75+ features. sort ( ) ;
76+ write ! ( fmt, "[{}]" , features. join( "," ) ) ?
77+ }
7578 }
7679 }
7780
0 commit comments