From f370dd58c2c71674d030866fc2d0fde78e0d3dbb Mon Sep 17 00:00:00 2001 From: Imbris Date: Sun, 23 Jun 2019 16:42:17 -0400 Subject: [PATCH] Pass BufReader to Asset::load() --- common/src/assets/mod.rs | 29 +++++++++++++++-------------- common/src/terrain/structure.rs | 5 +++-- voxygen/src/ui/mod.rs | 12 +++++++----- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/common/src/assets/mod.rs b/common/src/assets/mod.rs index f8f3b404d4..03d88de75a 100644 --- a/common/src/assets/mod.rs +++ b/common/src/assets/mod.rs @@ -7,8 +7,7 @@ use std::{ collections::HashMap, env, fs::{read_dir, read_link, File, ReadDir}, - io::BufReader, - io::Read, + io::{BufReader, Read}, path::{Path, PathBuf}, sync::{Arc, RwLock}, }; @@ -41,11 +40,13 @@ lazy_static! { /// Function used to load assets. Permits manipulating the loaded asset with a mapping function. /// Loaded assets are cached in a global singleton hashmap. /// Example usage: -/// ```no_run -/// use image::DynamicImage; -/// use veloren_common::assets; +/// ```no_run= +/// use veloren_common::{assets, terrain::Structure}; /// -/// let my_image = assets::load::("core.ui.backgrounds.city").unwrap(); +/// let my_tree_structure = assets::load_map( +/// "world/tree/oak_green/1.vox", +/// |s: Structure| s.with_center(Vec3::new(15, 18, 14)), +/// ).unwrap(); /// ``` pub fn load_map A>( specifier: &str, @@ -55,7 +56,7 @@ pub fn load_map A>( match assets_write.get(specifier) { Some(asset) => Ok(Arc::clone(asset).downcast()?), None => { - let asset = Arc::new(f(A::load(specifier)?)); + let asset = Arc::new(f(A::load(load_from_path(specifier)?)?)); let clone = Arc::clone(&asset); assets_write.insert(specifier.to_owned(), clone); Ok(asset) @@ -92,28 +93,28 @@ pub fn load_expect(specifier: &str) -> Arc { /// Asset Trait pub trait Asset: Send + Sync + Sized { - fn load(specifier: &str) -> Result; + fn load(buf_reader: BufReader) -> Result; } impl Asset for DynamicImage { - fn load(specifier: &str) -> Result { + fn load(mut buf_reader: BufReader) -> Result { let mut buf = Vec::new(); - load_from_path(specifier)?.read_to_end(&mut buf)?; + buf_reader.read_to_end(&mut buf)?; Ok(image::load_from_memory(&buf).unwrap()) } } impl Asset for DotVoxData { - fn load(specifier: &str) -> Result { + fn load(mut buf_reader: BufReader) -> Result { let mut buf = Vec::new(); - load_from_path(specifier)?.read_to_end(&mut buf)?; + buf_reader.read_to_end(&mut buf)?; Ok(dot_vox::load_bytes(&buf).unwrap()) } } impl Asset for Value { - fn load(specifier: &str) -> Result { - Ok(serde_json::from_reader(load_from_path(specifier)?).unwrap()) + fn load(buf_reader: BufReader) -> Result { + Ok(serde_json::from_reader(buf_reader).unwrap()) } } diff --git a/common/src/terrain/structure.rs b/common/src/terrain/structure.rs index 9eb4740456..b4b069f9d2 100644 --- a/common/src/terrain/structure.rs +++ b/common/src/terrain/structure.rs @@ -5,6 +5,7 @@ use crate::{ volumes::dyna::{Dyna, DynaErr}, }; use dot_vox::DotVoxData; +use std::io::{BufReader, Read}; use vek::*; #[derive(Copy, Clone)] @@ -61,8 +62,8 @@ impl ReadVol for Structure { } impl Asset for Structure { - fn load(specifier: &str) -> Result { - let dot_vox_data = DotVoxData::load(specifier)?; + fn load(buf_reader: BufReader) -> Result { + let dot_vox_data = DotVoxData::load(buf_reader)?; if let Some(model) = dot_vox_data.models.get(0) { let palette = dot_vox_data diff --git a/voxygen/src/ui/mod.rs b/voxygen/src/ui/mod.rs index faa5487c85..2f2d0a0667 100644 --- a/voxygen/src/ui/mod.rs +++ b/voxygen/src/ui/mod.rs @@ -41,9 +41,11 @@ use conrod_core::{ use graphic::Id as GraphicId; use log::warn; use scale::Scale; -use std::io::Read; -use std::ops::Range; -use std::sync::Arc; +use std::{ + io::{BufReader, Read}, + ops::Range, + sync::Arc, +}; use util::{linear_to_srgb, srgb_to_linear}; use vek::*; @@ -79,9 +81,9 @@ impl DrawCommand { pub struct Font(text::Font); impl assets::Asset for Font { - fn load(specifier: &str) -> Result { + fn load(mut buf_reader: BufReader) -> Result { let mut buf = Vec::new(); - assets::load_from_path(specifier)?.read_to_end(&mut buf)?; + buf_reader.read_to_end(&mut buf)?; Ok(Font(text::Font::from_bytes(buf.clone()).unwrap())) } }