diff --git a/Cargo.toml b/Cargo.toml index 9a63893..c377111 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,20 +1,2 @@ -[package] -name = "unreal-sdk" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -log = "0.4.0" -thiserror = "1.0.0" -itertools = "0.10.0" -rayon = "1.0.0" -bitflags = "1.0.0" -anyhow = "1.0" -widestring = "1.0" -lazy_static = "1.4.0" -once_cell = "1.17.1" - -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" \ No newline at end of file +[workspace] +members = ["sdk-serializer", "unreal-sdk", "sdk-generator"] \ No newline at end of file diff --git a/unreal-sdk/.gitignore b/unreal-sdk/.gitignore new file mode 100644 index 0000000..4fffb2f --- /dev/null +++ b/unreal-sdk/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock diff --git a/unreal-sdk/Cargo.toml b/unreal-sdk/Cargo.toml new file mode 100644 index 0000000..9a63893 --- /dev/null +++ b/unreal-sdk/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "unreal-sdk" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +log = "0.4.0" +thiserror = "1.0.0" +itertools = "0.10.0" +rayon = "1.0.0" +bitflags = "1.0.0" +anyhow = "1.0" +widestring = "1.0" +lazy_static = "1.4.0" +once_cell = "1.17.1" + +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" \ No newline at end of file diff --git a/rust-toolchain b/unreal-sdk/rust-toolchain similarity index 100% rename from rust-toolchain rename to unreal-sdk/rust-toolchain diff --git a/src/any_type.rs b/unreal-sdk/src/any_type.rs similarity index 100% rename from src/any_type.rs rename to unreal-sdk/src/any_type.rs diff --git a/src/fname.rs b/unreal-sdk/src/fname.rs similarity index 100% rename from src/fname.rs rename to unreal-sdk/src/fname.rs diff --git a/src/global_tables/mod.rs b/unreal-sdk/src/global_tables/mod.rs similarity index 100% rename from src/global_tables/mod.rs rename to unreal-sdk/src/global_tables/mod.rs diff --git a/src/global_tables/names.rs b/unreal-sdk/src/global_tables/names.rs similarity index 100% rename from src/global_tables/names.rs rename to unreal-sdk/src/global_tables/names.rs diff --git a/src/global_tables/objects.rs b/unreal-sdk/src/global_tables/objects.rs similarity index 100% rename from src/global_tables/objects.rs rename to unreal-sdk/src/global_tables/objects.rs diff --git a/src/helper_types.rs b/unreal-sdk/src/helper_types.rs similarity index 100% rename from src/helper_types.rs rename to unreal-sdk/src/helper_types.rs diff --git a/src/lib.rs b/unreal-sdk/src/lib.rs similarity index 100% rename from src/lib.rs rename to unreal-sdk/src/lib.rs diff --git a/src/sdk/mod.rs b/unreal-sdk/src/sdk/mod.rs similarity index 100% rename from src/sdk/mod.rs rename to unreal-sdk/src/sdk/mod.rs diff --git a/src/sdk/output/mod.rs b/unreal-sdk/src/sdk/output/mod.rs similarity index 100% rename from src/sdk/output/mod.rs rename to unreal-sdk/src/sdk/output/mod.rs diff --git a/src/sdk/output/rust.rs b/unreal-sdk/src/sdk/output/rust.rs similarity index 100% rename from src/sdk/output/rust.rs rename to unreal-sdk/src/sdk/output/rust.rs diff --git a/src/sdk/process.rs b/unreal-sdk/src/sdk/process.rs similarity index 91% rename from src/sdk/process.rs rename to unreal-sdk/src/sdk/process.rs index e6e8d33..367f242 100644 --- a/src/sdk/process.rs +++ b/unreal-sdk/src/sdk/process.rs @@ -2,8 +2,9 @@ use std::collections::{btree_map::Entry, BTreeMap}; use anyhow::Context; use itertools::Itertools; -use rayon::prelude::{IntoParallelRefIterator, ParallelIterator}; +use rayon::prelude::{IntoParallelIterator, IntoParallelRefIterator, ParallelIterator}; +use crate::global_tables::objects::GOBJECTS; use crate::sdk::repr::*; use crate::v2_types::{ any_type::{self, AnyField, AnyObject, AnyProperty, AnyStruct}, @@ -18,6 +19,51 @@ use crate::v2_types::{UScriptStruct, UStruct}; use super::repr::{ Class, ClassField, ClassMethod, Enum, Package, ProcessedPackage, Type, UnrealType, }; +use super::FoldIntoPackages; + +impl Sdk { + pub fn build() -> anyhow::Result { + let packages = Self::get_packages()?; + + let packages = packages + .into_par_iter() + .map(|pkg| { + let package_ref = pkg + .package_object + .as_package_ref() + .context("object was not a package object."); + + let output = + package_ref.and_then(|package_ref| pkg.process().map(|pkg| (package_ref, pkg))); + + output + }) + .collect::>>()?; + + Ok(Self { packages }) + } + fn get_packages() -> anyhow::Result> { + let objects = GOBJECTS + .read() + .map_err(|_| anyhow::anyhow!("couldn't read gobject table"))?; + let objects = objects.as_objects().context("no object array")?; + + let sorted_objects = objects + .iter() + .filter_map(|item| item.object()) + .fold_into_packages(); + + let packages = sorted_objects + .into_iter() + .map(|(package_object, children)| Package { + package_object, + children, + }) + .collect::>(); + + Ok(packages) + } +} fn default_or_anon(name: &str) -> bool { name.contains("Default__") diff --git a/src/sdk/repr.rs b/unreal-sdk/src/sdk/repr.rs similarity index 99% rename from src/sdk/repr.rs rename to unreal-sdk/src/sdk/repr.rs index ca610cf..e2d94ba 100644 --- a/src/sdk/repr.rs +++ b/unreal-sdk/src/sdk/repr.rs @@ -35,7 +35,7 @@ pub struct ObjectRef { #[derive(Debug, Serialize, Deserialize)] pub struct Sdk { - packages: BTreeMap, + pub packages: BTreeMap, } /// A package represents some group of packages that are related to another, diff --git a/src/tarray.rs b/unreal-sdk/src/tarray.rs similarity index 100% rename from src/tarray.rs rename to unreal-sdk/src/tarray.rs diff --git a/src/types.rs b/unreal-sdk/src/types.rs similarity index 100% rename from src/types.rs rename to unreal-sdk/src/types.rs diff --git a/src/v2_types/any_type.rs b/unreal-sdk/src/v2_types/any_type.rs similarity index 100% rename from src/v2_types/any_type.rs rename to unreal-sdk/src/v2_types/any_type.rs diff --git a/src/v2_types/mod.rs b/unreal-sdk/src/v2_types/mod.rs similarity index 100% rename from src/v2_types/mod.rs rename to unreal-sdk/src/v2_types/mod.rs