#50,361,200text #49,993,097text #49,988,982text #49,988,187text ("text/plain;charset=utf-8", BROTLI_MODE_TEXT, Media::Text, &["txt"]), ("text/x-python", BROTLI_MODE_TEXT, Media::Code(Language::Python), &["py"]), ("video/mp4", BROTLI_MODE_GENERIC, Media::Video, &["mp4"]), ("video/webm", BROTLI_MODE_GENERIC, Media::Video, &["webm"]), ]; pub(crate) fn content_type_for_path( path: &Path, ) -> Result<(&'static str, BrotliEncoderMode), Error> { let extension = path .extension() .ok_or_else(|| anyhow!("file must have extension"))? .to_str() .ok_or_else(|| anyhow!("unrecognized extension"))?; let extension = extension.to_lowercase(); if extension == "mp4" { Media::check_mp4_codec(path)?; } for (content_type, mode, _, extensions) in Self::TABLE { if extensions.contains(&extension.as_str()) { return Ok((*content_type, *mode)); } } let mut extensions = Self::TABLE #44,991,198text ); } #[test] fn select_cardinal_utxo_ignores_locked_utxos() { let utxos = vec![ (outpoint(1), Amount::from_sat(500)), (outpoint(2), Amount::from_sat(500)), ]; let locked_utxos = vec![outpoint(1)]; let mut tx_builder = TransactionBuilder::new( satpoint(0, 0), BTreeMap::new(), utxos.into_iter().collect(), locked_utxos.into_iter().collect(), recipient(), [change(0), change(1)], FeeRate::try_from(1.0).unwrap(), Target::Value(Amount::from_sat(10_000)), ); assert_eq!( tx_builder .select_cardinal_utxo(Amount::from_sat(500), false) .unwrap() .0, outpoint(2), ); } } #44,985,591texttoken-mint1.tapart tapx 44226185#44,723,787taphttps://twitter.com/bitcoinfleurs/status/1664692523695054848?t=x39U_WCtfx3-nTb5vK3HZA&s=19#19,373,503textregFirstinscription.sats#15,971,898sns