moving to workspace

This commit is contained in:
Janis 2023-06-19 18:36:15 +02:00
parent 555cbb79a2
commit 36af2ae124
20 changed files with 72 additions and 22 deletions

View file

@ -1,20 +1,2 @@
[package] [workspace]
name = "unreal-sdk" members = ["sdk-serializer", "unreal-sdk", "sdk-generator"]
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"

2
unreal-sdk/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/target
/Cargo.lock

20
unreal-sdk/Cargo.toml Normal file
View file

@ -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"

View file

@ -2,8 +2,9 @@ use std::collections::{btree_map::Entry, BTreeMap};
use anyhow::Context; use anyhow::Context;
use itertools::Itertools; 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::sdk::repr::*;
use crate::v2_types::{ use crate::v2_types::{
any_type::{self, AnyField, AnyObject, AnyProperty, AnyStruct}, any_type::{self, AnyField, AnyObject, AnyProperty, AnyStruct},
@ -18,6 +19,51 @@ use crate::v2_types::{UScriptStruct, UStruct};
use super::repr::{ use super::repr::{
Class, ClassField, ClassMethod, Enum, Package, ProcessedPackage, Type, UnrealType, Class, ClassField, ClassMethod, Enum, Package, ProcessedPackage, Type, UnrealType,
}; };
use super::FoldIntoPackages;
impl Sdk {
pub fn build() -> anyhow::Result<Self> {
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::<anyhow::Result<BTreeMap<_, _>>>()?;
Ok(Self { packages })
}
fn get_packages() -> anyhow::Result<Vec<Package>> {
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::<Vec<_>>();
Ok(packages)
}
}
fn default_or_anon(name: &str) -> bool { fn default_or_anon(name: &str) -> bool {
name.contains("Default__") name.contains("Default__")

View file

@ -35,7 +35,7 @@ pub struct ObjectRef {
#[derive(Debug, Serialize, Deserialize)] #[derive(Debug, Serialize, Deserialize)]
pub struct Sdk { pub struct Sdk {
packages: BTreeMap<PackageRef, ProcessedPackage>, pub packages: BTreeMap<PackageRef, ProcessedPackage>,
} }
/// A package represents some group of packages that are related to another, /// A package represents some group of packages that are related to another,