#[ allow( clippy ::std_instead_of_alloc, clippy ::std_instead_of_core ) ]
mod private
{
use crate :: *;
pub trait PackageMdExtension
{
fn name( &self ) -> Result< &str, package ::PackageError >;
fn stability( &self ) -> Result< action ::readme_health_table_renew ::Stability, package ::PackageError >;
fn repository( &self ) -> Result< Option< String >, package ::PackageError >;
fn discord_url( &self ) -> Result< Option< String >, package ::PackageError >;
}
impl package ::Package< '_ >
{
pub fn name( &self ) -> Result< &str, package ::PackageError >
{
match self
{
Self ::Manifest( manifest ) =>
{
let data = &manifest.data;
Result ::Ok( data[ "package" ][ "name" ].as_str().unwrap() )
}
Self ::WorkspacePackageRef( package ) =>
{
Result ::Ok( package.name() )
}
}
}
pub fn stability( &self ) -> Result< action ::readme_health_table_renew ::Stability, package ::PackageError >
{
match self
{
Self ::Manifest( _ ) =>
{
Result ::Ok
(
self.package_metadata()
.and_then( | m | m.get( "stability" ) )
.and_then( | s | s.as_str() )
.and_then( | s | s.parse :: < action ::readme_health_table_renew ::Stability >().ok() )
.unwrap_or( action ::readme_health_table_renew ::Stability ::Experimental )
)
}
Self ::WorkspacePackageRef( package ) =>
{
Result ::Ok
(
package
.metadata()[ "stability" ]
.as_str()
.and_then( | s | s.parse :: < action ::readme_health_table_renew ::Stability >().ok() )
.unwrap_or( action ::readme_health_table_renew ::Stability ::Experimental)
)
}
}
}
pub fn repository( &self ) -> Result< Option< String >, package ::PackageError >
{
match self
{
Self ::Manifest( manifest ) =>
{
let data = &manifest.data;
Result ::Ok
(
data[ "package" ]
.get( "repository" )
.and_then( | r | r.as_str() )
.map( std ::string ::ToString ::to_string )
)
}
Self ::WorkspacePackageRef( package ) =>
{
Result ::Ok( package.repository().cloned() )
}
}
}
pub fn discord_url( &self ) -> Result< Option< String >, package ::PackageError >
{
match self
{
Self ::Manifest( _ ) =>
{
Result ::Ok
(
self.package_metadata()
.and_then( | m | m.get( "discord_url" ) )
.and_then( | url | url.as_str() )
.map( std ::string ::ToString ::to_string )
)
}
Self ::WorkspacePackageRef( package ) =>
{
Result ::Ok( package.metadata()[ "discord_url" ].as_str().map( std ::string ::ToString ::to_string ) )
}
}
}
fn package_metadata( &self ) -> Option< &toml_edit ::Item >
{
match self
{
package ::Package ::Manifest( manifest ) =>
{
let data = &manifest.data;
data[ "package" ]
.get( "metadata" )
}
package ::Package ::WorkspacePackageRef( _ ) =>
{
None
}
}
}
}
}
crate ::mod_interface!
{
own use PackageMdExtension;
}