Struct grafbase_local_server::types::Assets
source · pub struct Assets;Implementations§
source§impl Assets
impl Assets
sourcepub fn get(file_path: &str) -> Option<EmbeddedFile>
pub fn get(file_path: &str) -> Option<EmbeddedFile>
Get an embedded file and its metadata.
Examples found in repository?
src/servers.rs (line 208)
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
fn export_embedded_files() -> Result<(), ServerError> {
let environment = Environment::get();
let current_version = env!("CARGO_PKG_VERSION");
let version_path = environment.user_dot_grafbase_path.join(ASSET_VERSION_FILE);
let export_files = if env::var("GRAFBASE_SKIP_ASSET_VERSION_CHECK").is_ok() {
false
} else if environment.user_dot_grafbase_path.is_dir() {
let asset_version = fs::read_to_string(&version_path).map_err(|_| ServerError::ReadVersion)?;
current_version != asset_version
} else {
true
};
if export_files {
trace!("writing worker files");
fs::create_dir_all(&environment.user_dot_grafbase_path).map_err(|_| ServerError::CreateCacheDir)?;
let gitignore_path = &environment.user_dot_grafbase_path.join(GIT_IGNORE_FILE);
fs::write(gitignore_path, GIT_IGNORE_CONTENTS)
.map_err(|_| ServerError::WriteFile(gitignore_path.to_string_lossy().into_owned()))?;
let mut write_results = Assets::iter().map(|path| {
let file = Assets::get(path.as_ref());
let full_path = environment.user_dot_grafbase_path.join(path.as_ref());
let parent = full_path.parent().expect("must have a parent");
let parent_exists = parent.metadata().is_ok();
let create_dir_result = if parent_exists {
Ok(())
} else {
fs::create_dir_all(parent)
};
// must be Some(file) since we're iterating over existing paths
let write_result = create_dir_result.and_then(|_| fs::write(&full_path, file.unwrap().data));
(write_result, full_path)
});
if let Some((_, path)) = write_results.find(|(result, _)| result.is_err()) {
let error_path_string = path.to_string_lossy().into_owned();
return Err(ServerError::WriteFile(error_path_string));
}
if fs::write(&version_path, current_version).is_err() {
let version_path_string = version_path.to_string_lossy().into_owned();
return Err(ServerError::WriteFile(version_path_string));
};
}
Ok(())
}sourcepub fn iter() -> impl Iterator<Item = Cow<'static, str>>
pub fn iter() -> impl Iterator<Item = Cow<'static, str>>
Iterates over the file paths in the folder.
Examples found in repository?
src/servers.rs (line 207)
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
fn export_embedded_files() -> Result<(), ServerError> {
let environment = Environment::get();
let current_version = env!("CARGO_PKG_VERSION");
let version_path = environment.user_dot_grafbase_path.join(ASSET_VERSION_FILE);
let export_files = if env::var("GRAFBASE_SKIP_ASSET_VERSION_CHECK").is_ok() {
false
} else if environment.user_dot_grafbase_path.is_dir() {
let asset_version = fs::read_to_string(&version_path).map_err(|_| ServerError::ReadVersion)?;
current_version != asset_version
} else {
true
};
if export_files {
trace!("writing worker files");
fs::create_dir_all(&environment.user_dot_grafbase_path).map_err(|_| ServerError::CreateCacheDir)?;
let gitignore_path = &environment.user_dot_grafbase_path.join(GIT_IGNORE_FILE);
fs::write(gitignore_path, GIT_IGNORE_CONTENTS)
.map_err(|_| ServerError::WriteFile(gitignore_path.to_string_lossy().into_owned()))?;
let mut write_results = Assets::iter().map(|path| {
let file = Assets::get(path.as_ref());
let full_path = environment.user_dot_grafbase_path.join(path.as_ref());
let parent = full_path.parent().expect("must have a parent");
let parent_exists = parent.metadata().is_ok();
let create_dir_result = if parent_exists {
Ok(())
} else {
fs::create_dir_all(parent)
};
// must be Some(file) since we're iterating over existing paths
let write_result = create_dir_result.and_then(|_| fs::write(&full_path, file.unwrap().data));
(write_result, full_path)
});
if let Some((_, path)) = write_results.find(|(result, _)| result.is_err()) {
let error_path_string = path.to_string_lossy().into_owned();
return Err(ServerError::WriteFile(error_path_string));
}
if fs::write(&version_path, current_version).is_err() {
let version_path_string = version_path.to_string_lossy().into_owned();
return Err(ServerError::WriteFile(version_path_string));
};
}
Ok(())
}