载入中...
搜索中...
未找到
UnitySource.cpp
浏览该文件的文档.
10Result<std::string> metaScalar(std::span<const std::uint8_t> bytes, std::string_view key, std::string_view path) {
12 return Result<std::string>::failure(Diagnostic::error(DiagnosticCode::ParseError, "binary Unity metadata",
16 return Result<std::string>::failure(Diagnostic::error(DiagnosticCode::ParseError, "Unity metadata is not UTF-8",
49 const auto ext = dot == std::string_view::npos ? std::string{} : foldAscii(std::string(path.substr(dot)));
52 if (ext == ".fbx" || ext == ".obj" || ext == ".gltf" || ext == ".glb" || ext == ".blend" || ext == ".dae")
55 if (ext == ".png" || ext == ".jpg" || ext == ".jpeg" || ext == ".tga" || ext == ".psd" || ext == ".exr" ||
58 if (ext == ".anim" || ext == ".controller" || ext == ".overridecontroller") return UnitySourceKind::Animation;
70 return guid == "00000000000000000000000000000000" || guid == "0000000000000000e000000000000000" ||
74Result<std::vector<UnitySourceReference>> references(std::span<const std::uint8_t> bytes, const std::string& path,
91 Diagnostic::error(DiagnosticCode::InvalidArgument, "Unity serialized flow record exceeds string budget",
98 DiagnosticCode::ParseError, "malformed Unity object reference", path, {}, "asset.import.unity"));
104 Diagnostic::error(DiagnosticCode::ParseError, "Unity reference fileID exceeds signed 64-bit range",
108 Diagnostic::error(DiagnosticCode::InvalidArgument, "Unity reference count exceeds budget", path, {},
113 [](const auto& a, const auto& b) { return std::tie(a.guid, a.fileId) < std::tie(b.guid, b.fileId); });
121Result<UnitySourceIndex> indexUnitySources(const UnitySourceFiles& files, const AssetImportLimits& limits) {
137 DiagnosticCode::Conflict, "Unity source paths differ only by case", path, {}, "asset.import.unity"));
154 DiagnosticCode::ParseError, "Unity .meta needs a non-reserved GUID", path, {}, "asset.import.unity"));
158 Diagnostic::error(DiagnosticCode::Conflict, "duplicate Unity GUID", path, {}, "asset.import.unity"));
172 DiagnosticCode::NotFound, "Unity metadata has no source payload", path, {}, "asset.import.unity"));
191 DiagnosticCode::InvalidArgument, "Unity asset count exceeds budget", {}, {}, "asset.import.unity"));
200 for (auto slash = entry.path.find('/'); slash != std::string::npos; slash = entry.path.find('/', slash + 1)) {
208 std::sort(index.assets.begin(), index.assets.end(), [](const auto& a, const auto& b) { return a.path < b.path; });
223 index.findings.push_back({entry.path, "dependency:" + ref.guid + ":" + std::to_string(ref.fileId),
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
bool validPath(std::string_view path, const AssetImportLimits &limits)
Valid path.
Definition UnitySourceInternal.h:85
Result< std::string > metaScalar(std::span< const std::uint8_t > bytes, std::string_view key, std::string_view path)
Read an unindented scalar from .meta; rejects duplicate keys and binary metadata.
Definition UnitySource.cpp:10
Definition AssetImporter.h:14
std::map< std::string, std::vector< std::uint8_t > > UnitySourceFiles
Owning project-relative source bytes, including the original .meta files.
Definition UnitySource.h:12
UnitySourceKind
Source category; classification does not imply runtime conversion support.
Definition UnitySource.h:15
@ Unsupported
Result< UnitySourceIndex > indexUnitySources(const UnitySourceFiles &files, const AssetImportLimits &limits)
Validate project paths and .meta identities and index serialized GUID/fileID references.
Definition UnitySource.cpp:121
@ InvalidArgument
@ NotFound
@ ParseError
@ Conflict
bool isValidUtf8(std::string_view text, Utf8NullPolicy nullPolicy) noexcept
Validate shortest-form UTF-8, Unicode scalar range and optional NUL exclusion.
Definition Utf8Validation.cpp:5
@ Reject
Parser and allocation budgets applied to untrusted importer inputs.
Definition AssetImporter.h:17
std::uint32_t maximumAssets
Definition AssetImporter.h:20
std::uint64_t maximumSourceBytes
Definition AssetImporter.h:18
std::uint32_t maximumStringBytes
Definition AssetImporter.h:23
std::vector< UnitySourceReference > references
Definition UnitySource.h:43
Owning deterministic index sorted by path, plus missing-reference diagnostics.
Definition UnitySource.h:47
std::vector< UnitySourceAsset > assets
Definition UnitySource.h:48