fn from_asset(asset: &serde_json::Value) -> crate::Result<ReleaseAsset> {
    let download_url = asset["browser_download_url"]
      .as_str()
      .ok_or_else(|| crate::Error::Network("Asset missing `browser_download_url`".into()))?;
    let name = asset["name"]
      .as_str()
      .ok_or_else(|| crate::Error::Network("Asset missing `name`".into()))?;
    Ok(ReleaseAsset {
      download_url: download_url.to_owned(),
      name: name.to_owned(),
    })
  }
/// Parse a release-asset json object
///
/// Errors:
///     * Missing required name & browser_download_url keys
Parse a release-asset json object
Errors:
Missing required name & browser_download_url keys
Parse a release - asset json object Errors : Missing required name & browser_download_url keys
fn from_asset(asset: &serde_json::Value) -> crate::Result<ReleaseAsset> {
    let download_url = asset["browser_download_url"]
      .as_str()
      .ok_or_else(|| crate::Error::Network("Asset missing `browser_download_url`".into()))?;
    let name = asset["name"]
      .as_str()
      .ok_or_else(|| crate::Error::Network("Asset missing `name`".into()))?;
    Ok(ReleaseAsset {
      download_url: download_url.to_owned(),
      name: name.to_owned(),
    })
  }
fn from_asset ( asset : & serde_json :: Value ) -> crate :: Result < ReleaseAsset > { let download_url = asset [ " " ] . as_str ( ) . ok_or_else ( | | crate :: Error :: Network ( " " . into ( ) ) ) ? ; let name = asset [ " " ] . as_str ( ) . ok_or_else ( | | crate :: Error :: Network ( " " . into ( ) ) ) ? ; Ok ( ReleaseAsset { download_url : download_url . to_owned ( ) , name : name . to_owned ( ) , } ) }
Parse a release-asset json object
Errors:
 Missing required name & browser_download_url keys
Parse a release - asset json object Errors : Missing required name & browser_download_url keys
asset
&serde_json::Value
asset
&serde_json::Value