mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-20 20:55:50 +00:00
Clean up warnings, add RojoTree into ServeSession
This commit is contained in:
@@ -6,3 +6,4 @@ sessionId: "[session id]"
|
||||
serverVersion: 0.5.0
|
||||
protocolVersion: 3
|
||||
expectedPlaceIds: ~
|
||||
rootInstanceId: "[root id]"
|
||||
|
||||
@@ -28,7 +28,8 @@ fn empty() {
|
||||
let info = session.wait_to_come_online();
|
||||
|
||||
assert_yaml_snapshot!(info, {
|
||||
".sessionId" => "[session id]"
|
||||
".sessionId" => "[session id]",
|
||||
".rootInstanceId" => "[root id]"
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@@ -70,7 +70,7 @@ pub fn serve(options: &ServeOptions) -> Result<(), ServeError> {
|
||||
let patch_set = compute_patch_set(&snapshot, &tree, root_id);
|
||||
apply_patch_set(&mut tree, &patch_set);
|
||||
|
||||
let session = Arc::new(ServeSession::new(maybe_project));
|
||||
let session = Arc::new(ServeSession::new(tree, maybe_project));
|
||||
let server = LiveServer::new(session);
|
||||
|
||||
server.start(port);
|
||||
|
||||
@@ -19,19 +19,6 @@ impl<T> FsResultExt<T> for Result<T, FsError> {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: New error type that contains errors specific to our application,
|
||||
// wrapping io::Error either directly or through another error type that has
|
||||
// path information.
|
||||
//
|
||||
// It's possible that we should hoist up the path information one more level, or
|
||||
// destructure/restructure information to hoist the path out of FsError and just
|
||||
// embed io::Error?
|
||||
pub enum ImfsError {
|
||||
NotFound,
|
||||
WrongKind,
|
||||
Io(io::Error),
|
||||
}
|
||||
|
||||
/// A wrapper around io::Error that also attaches the path associated with the
|
||||
/// error.
|
||||
#[derive(Debug, Fail)]
|
||||
|
||||
@@ -34,7 +34,7 @@ struct SourceProject {
|
||||
|
||||
impl SourceProject {
|
||||
/// Consumes the SourceProject and yields a Project, ready for prime-time.
|
||||
pub fn into_project(mut self, project_file_location: &Path) -> Project {
|
||||
pub fn into_project(self, project_file_location: &Path) -> Project {
|
||||
let tree = self.tree.into_project_node(project_file_location);
|
||||
|
||||
Project {
|
||||
|
||||
@@ -1,23 +1,29 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use crate::{project::Project, session_id::SessionId};
|
||||
use crate::{project::Project, session_id::SessionId, snapshot::RojoTree};
|
||||
|
||||
/// Contains all of the state for a Rojo serve session.
|
||||
pub struct ServeSession {
|
||||
root_project: Option<Project>,
|
||||
session_id: SessionId,
|
||||
tree: RojoTree,
|
||||
}
|
||||
|
||||
impl ServeSession {
|
||||
pub fn new(root_project: Option<Project>) -> ServeSession {
|
||||
pub fn new(tree: RojoTree, root_project: Option<Project>) -> ServeSession {
|
||||
let session_id = SessionId::new();
|
||||
|
||||
ServeSession {
|
||||
session_id,
|
||||
root_project,
|
||||
tree,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn tree(&self) -> &RojoTree {
|
||||
&self.tree
|
||||
}
|
||||
|
||||
pub fn session_id(&self) -> SessionId {
|
||||
self.session_id
|
||||
}
|
||||
|
||||
@@ -111,10 +111,12 @@ fn snapshot_init<F: ImfsFetcher>(
|
||||
let init_path = folder_entry.path().join(init_name);
|
||||
|
||||
if let Some(init_entry) = imfs.get(init_path).with_not_found()? {
|
||||
if let Some(mut dir_snapshot) = SnapshotDir::from_imfs(imfs, folder_entry)? {
|
||||
if let Some(dir_snapshot) = SnapshotDir::from_imfs(imfs, folder_entry)? {
|
||||
if let Some(mut init_snapshot) = snapshot_lua_file(imfs, &init_entry)? {
|
||||
init_snapshot.name = dir_snapshot.name;
|
||||
init_snapshot.children = dir_snapshot.children;
|
||||
// TODO: Metadata
|
||||
// TODO: Validate directory class name is "Folder"
|
||||
|
||||
return Ok(Some(init_snapshot));
|
||||
}
|
||||
|
||||
@@ -53,11 +53,15 @@ impl ApiService {
|
||||
|
||||
/// Get a summary of information about the server
|
||||
fn handle_api_rojo(&self) -> Response<Body> {
|
||||
let tree = self.serve_session.tree();
|
||||
let root_instance_id = tree.get_root_id();
|
||||
|
||||
response_json(&ServerInfoResponse {
|
||||
server_version: SERVER_VERSION.to_owned(),
|
||||
protocol_version: PROTOCOL_VERSION,
|
||||
session_id: self.serve_session.session_id(),
|
||||
expected_place_ids: self.serve_session.serve_place_ids().map(Clone::clone),
|
||||
expected_place_ids: self.serve_session.serve_place_ids().cloned(),
|
||||
root_instance_id,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
use std::collections::HashSet;
|
||||
|
||||
use rbx_dom_weak::RbxId;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::session_id::SessionId;
|
||||
@@ -20,7 +21,7 @@ pub struct ServerInfoResponse {
|
||||
pub server_version: String,
|
||||
pub protocol_version: u64,
|
||||
pub expected_place_ids: Option<HashSet<u64>>,
|
||||
// pub root_instance_id: RbxId,
|
||||
pub root_instance_id: RbxId,
|
||||
}
|
||||
|
||||
/// Response body from /api/read/{id}
|
||||
|
||||
Reference in New Issue
Block a user