Skip to main content

actr_cli/templates/swift/
data_stream.rs

1use crate::error::Result;
2use crate::templates::ProjectTemplate;
3use std::collections::HashMap;
4use std::path::Path;
5
6pub fn load(files: &mut HashMap<String, String>) -> Result<()> {
7    let fixtures_root = Path::new(env!("CARGO_MANIFEST_DIR")).join("fixtures");
8
9    // Load template files from disk with placeholders in path
10    ProjectTemplate::load_file(
11        &fixtures_root.join("swift/project.yml.hbs"),
12        files,
13        "project.yml",
14    )?;
15    ProjectTemplate::load_file(
16        &fixtures_root.join("swift/data-stream/manifest.toml.hbs"),
17        files,
18        "manifest.toml",
19    )?;
20    // Load empty manifest.lock.toml template
21    // This is REQUIRED for Swift projects because:
22    // 1. project.yml references it as a resource file
23    // 2. xcodegen requires all referenced files to exist during project generation
24    // 3. The lock file will be populated later by `actr deps install`
25    // See: fixtures/swift/project.yml.hbs:30-32 for the resource reference
26    ProjectTemplate::load_file(
27        &fixtures_root.join("swift/manifest.lock.toml.hbs"),
28        files,
29        "manifest.lock.toml",
30    )?;
31    ProjectTemplate::load_file(
32        &fixtures_root.join("swift/gitignore.hbs"),
33        files,
34        ".gitignore",
35    )?;
36    ProjectTemplate::load_file(
37        &fixtures_root.join("swift/dist.keep.hbs"),
38        files,
39        "dist/.keep",
40    )?;
41    ProjectTemplate::load_file(
42        &fixtures_root.join("swift/Info.plist.hbs"),
43        files,
44        "{{PROJECT_NAME_PASCAL}}/Info.plist",
45    )?;
46    ProjectTemplate::load_file(
47        &fixtures_root.join("swift/App.swift.hbs"),
48        files,
49        "{{PROJECT_NAME_PASCAL}}/{{PROJECT_NAME_PASCAL}}.swift",
50    )?;
51    ProjectTemplate::load_file(
52        &fixtures_root.join("swift/data-stream/ContentView.swift.hbs"),
53        files,
54        "{{PROJECT_NAME_PASCAL}}/ContentView.swift",
55    )?;
56    ProjectTemplate::load_file(
57        &fixtures_root.join("swift/data-stream/ActrService.swift.hbs"),
58        files,
59        "{{PROJECT_NAME_PASCAL}}/ActrService.swift",
60    )?;
61    // Load fixture files (no placeholders, fixed paths)
62    // Note: proto files are no longer created during init, they will be pulled via actr deps install
63    ProjectTemplate::load_file(
64        &fixtures_root.join("swift/Assets.xcassets/Contents.json"),
65        files,
66        "{{PROJECT_NAME_PASCAL}}/Assets.xcassets/Contents.json",
67    )?;
68    ProjectTemplate::load_file(
69        &fixtures_root.join("swift/Assets.xcassets/AccentColor.colorset/Contents.json"),
70        files,
71        "{{PROJECT_NAME_PASCAL}}/Assets.xcassets/AccentColor.colorset/Contents.json",
72    )?;
73    ProjectTemplate::load_file(
74        &fixtures_root.join("swift/Assets.xcassets/AppIcon.appiconset/Contents.json"),
75        files,
76        "{{PROJECT_NAME_PASCAL}}/Assets.xcassets/AppIcon.appiconset/Contents.json",
77    )?;
78
79    Ok(())
80}