OXYGENHUB

The phone as an OxygenFlow runner, first part (refs #8) 4aee5293461d

Account -> OxygenFlow runner -> Offer this phone as a runner: a one-time
token from the hub (POST /api/v1/user/runner-token), then OxygenFlow's
own runner registers the phone for the account's repositories (label
android, the WASM tier) and runs in a foreground service while the
phone is charging on Wi-Fi; leaving either drains it. OxygenFlow is a
subrepo (oxygenflow/), linked through rust-core (runner_register,
runner_serve, runner_stop, runner_tiers), whose oxy-core is now the one
OxygenFlow pins; the runner runs WASM modules in a thread (wasmtime).
Manifest: the service (specialUse, typed from Android 14), network
state, notifications. Test for the token call; 76 tests, lint clean.
Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key 24c72d58db55
When
· 2026-10-25 15:14 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
4aee5293461d15ee10023c9e9c81b017c1a8210b723d8f6b9eb3bdbb7c91543b
Depends on
0381bd8af55e 0a2858c0dad3 144cbf7bf2b5 57c0824300db 5ae4af48ddd2 5e9b097535f7 d1f635be9442 db00632a61d6 e0e4a1c48a77 e2df27a81e5d
Depended on by
263c6cad5e51 aa627197ec18 0b152017dee3 8440d51a2275 840c75813f86 1dfa631436b6 aa21eb5e0e5b e0004d61958c 26530d9758ee a49fd826e10b ed6c64d23fca 0414607973cb dfbc3e972872 fbc95ee8777c 1c42a70fcba3 e833eb0a9e7f 31e4f3755627 98dbd1220929 41e2e862abce 114865a07877 ff65ea456ff1 74bbbc259910
In bookmarks
main
In tags
v0.1.0 v0.1.1 v0.1.2 v0.1.3 v0.1.4 v0.1.5 v0.1.6 v0.1.7 v0.1.8 v0.1.9
Edits
127 atoms, 5 tree operations, 17 files

Browse the tree at this change

added app/src/main/java/io/oxygenhub/android/runner/PhoneRunner.kt +102 −0
1 +
package io.oxygenhub.android.runner
2 +
3 +
import android.content.Context
4 +
import android.content.Intent
5 +
import android.net.ConnectivityManager
6 +
import android.net.NetworkCapabilities
7 +
import android.os.BatteryManager
8 +
import android.os.Build
9 +
import androidx.core.content.ContextCompat
10 +
import io.oxygenhub.android.api.HubApi
11 +
import kotlinx.coroutines.Dispatchers
12 +
import kotlinx.coroutines.flow.MutableStateFlow
13 +
import kotlinx.coroutines.flow.StateFlow
14 +
import kotlinx.coroutines.flow.asStateFlow
15 +
import kotlinx.coroutines.withContext
16 +
import uniffi.rust_core.runnerIsRegistered
17 +
import uniffi.rust_core.runnerRegister
18 +
import uniffi.rust_core.runnerStop
19 +
import java.io.File
20 +
21 +
/**
22 +
 * The phone as an OxygenFlow runner (#8): OxygenFlow's own runner, built
23 +
 * into the app through rust-core, offering the WASM tier. It runs in
24 +
 * [RunnerService] only while the phone is on charge and on an unmetered
25 +
 * network (Wi-Fi), and drains when either stops: it claims nothing more
26 +
 * and finishes what it holds.
27 +
 */
28 +
object PhoneRunner {
29 +
    sealed interface State {
30 +
        data object Unregistered : State
31 +
32 +
        /** Registered, not running. */
33 +
        data object Stopped : State
34 +
35 +
        /** Not allowed to run now, and why (off charge, off Wi-Fi). */
36 +
        data class Waiting(val why: String) : State
37 +
38 +
        data object Running : State
39 +
40 +
        /** Told to stop: finishing what it holds. */
41 +
        data class Draining(val why: String) : State
42 +
43 +
        data class Failed(val message: String) : State
44 +
    }
45 +
46 +
    private val _state = MutableStateFlow<State>(State.Unregistered)
47 +
    val state: StateFlow<State> = _state.asStateFlow()
48 +
49 +
    internal fun set(state: State) {
50 +
        _state.value = state
51 +
    }
52 +
53 +
    /** Where the runner keeps its credential and its jobs' files. */
54 +
    fun home(context: Context): File = File(context.filesDir, "flow").also { it.mkdirs() }
55 +
56 +
    /** Called when the app starts and the service ends: what the runner is, as far as this process knows. */
57 +
    fun refresh(context: Context) {
58 +
        val now = _state.value
59 +
        if (now is State.Running || now is State.Draining) return
60 +
        _state.value = if (runnerIsRegistered(home(context).path)) {
61 +
            if (now is State.Waiting || now is State.Failed) now else State.Stopped
62 +
        } else {
63 +
            State.Unregistered
64 +
        }
65 +
    }
66 +
67 +
    /** The runner's name on the hub: the phone's model, as runner names are written. */
68 +
    fun name(): String =
69 +
        "android-" + Build.MODEL.lowercase().replace(Regex("[^a-z0-9]+"), "-").trim('-').ifEmpty { "phone" }
70 +
71 +
    /** Ask the hub for a token and register this phone as a runner for the account's repositories. */
72 +
    suspend fun register(context: Context, api: HubApi, hub: String): String {
73 +
        val token = api.runnerToken()
74 +
        val name = withContext(Dispatchers.IO) { runnerRegister(home(context).path, hub, token.token, name()) }
75 +
        _state.value = State.Stopped
76 +
        return name
77 +
    }
78 +
79 +
    /** Why the runner may not run now, or null when it may: on charge and on Wi-Fi. */
80 +
    fun blockedBy(context: Context): String? {
81 +
        val battery = context.getSystemService(BatteryManager::class.java)
82 +
        if (battery != null && !battery.isCharging) return "the phone is not on charge"
83 +
        val net = context.getSystemService(ConnectivityManager::class.java)
84 +
        val caps = net?.activeNetwork?.let { net.getNetworkCapabilities(it) }
85 +
        if (caps == null || !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
86 +
            return "the phone is not on Wi-Fi (or another unmetered network)"
87 +
        }
88 +
        return null
89 +
    }
90 +
91 +
    fun start(context: Context) {
92 +
        ContextCompat.startForegroundService(context, Intent(context, RunnerService::class.java))
93 +
    }
94 +
95 +
    /** Drain: claim nothing more, finish and report what it holds, then stop. */
96 +
    fun drain(why: String) {
97 +
        if (_state.value == State.Running) {
98 +
            _state.value = State.Draining(why)
99 +
            runnerStop()
100 +
        }
101 +
    }
102 +
}
added app/src/main/java/io/oxygenhub/android/runner/RunnerCard.kt +101 −0
1 +
package io.oxygenhub.android.runner
2 +
3 +
import android.Manifest
4 +
import android.content.pm.PackageManager
5 +
import android.os.Build
6 +
import androidx.activity.compose.rememberLauncherForActivityResult
7 +
import androidx.activity.result.contract.ActivityResultContracts
8 +
import androidx.compose.foundation.layout.Arrangement
9 +
import androidx.compose.foundation.layout.Column
10 +
import androidx.compose.foundation.layout.Row
11 +
import androidx.compose.foundation.layout.fillMaxWidth
12 +
import androidx.compose.foundation.layout.padding
13 +
import androidx.compose.material3.Button
14 +
import androidx.compose.material3.ElevatedCard
15 +
import androidx.compose.material3.MaterialTheme
16 +
import androidx.compose.material3.OutlinedButton
17 +
import androidx.compose.material3.Text
18 +
import androidx.compose.runtime.Composable
19 +
import androidx.compose.runtime.LaunchedEffect
20 +
import androidx.compose.runtime.getValue
21 +
import androidx.compose.runtime.mutableStateOf
22 +
import androidx.compose.runtime.remember
23 +
import androidx.compose.runtime.rememberCoroutineScope
24 +
import androidx.compose.runtime.setValue
25 +
import androidx.compose.ui.Modifier
26 +
import androidx.compose.ui.platform.LocalContext
27 +
import androidx.compose.ui.unit.dp
28 +
import androidx.core.content.ContextCompat
29 +
import androidx.lifecycle.compose.collectAsStateWithLifecycle
30 +
import io.oxygenhub.android.api.HubApi
31 +
import io.oxygenhub.android.api.userMessage
32 +
import io.oxygenhub.android.ui.theme.LocalStatusColors
33 +
import kotlinx.coroutines.CancellationException
34 +
import kotlinx.coroutines.launch
35 +
36 +
/**
37 +
 * The phone as an OxygenFlow runner (#8), on the Account screen: offer it
38 +
 * (one tap: a registration token from the hub, then the runner starts),
39 +
 * see what it is doing, stop it.
40 +
 */
41 +
@Composable
42 +
fun RunnerCard(api: HubApi, hub: String, canWrite: Boolean) {
43 +
    val context = LocalContext.current
44 +
    val state by PhoneRunner.state.collectAsStateWithLifecycle()
45 +
    var busy by remember { mutableStateOf(false) }
46 +
    var error by remember { mutableStateOf<String?>(null) }
47 +
    val scope = rememberCoroutineScope()
48 +
    LaunchedEffect(Unit) { PhoneRunner.refresh(context) }
49 +
    // The notification that says the runner works; the runner runs without it too.
50 +
    val ask = rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { PhoneRunner.start(context) }
51 +
    val start = {
52 +
        val granted = Build.VERSION.SDK_INT < 33 ||
53 +
            ContextCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
54 +
        if (granted) PhoneRunner.start(context) else ask.launch(Manifest.permission.POST_NOTIFICATIONS)
55 +
    }
56 +
    val status = LocalStatusColors.current
57 +
    ElevatedCard(Modifier.fillMaxWidth()) {
58 +
        Column(Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(8.dp)) {
59 +
            Text("OxygenFlow runner", style = MaterialTheme.typography.titleMedium)
60 +
            val (line, colour) = when (val s = state) {
61 +
                PhoneRunner.State.Unregistered -> "Run your repositories' WASM jobs on this phone, while it is charging on Wi-Fi." to MaterialTheme.colorScheme.onSurfaceVariant
62 +
                PhoneRunner.State.Stopped -> "Registered as ${PhoneRunner.name()}; not running." to MaterialTheme.colorScheme.onSurfaceVariant
63 +
                is PhoneRunner.State.Waiting -> "Not running: ${s.why}." to MaterialTheme.colorScheme.onSurfaceVariant
64 +
                PhoneRunner.State.Running -> "Running as ${PhoneRunner.name()}: taking WASM jobs." to status.ok
65 +
                is PhoneRunner.State.Draining -> "Draining (${s.why}): finishing its job, then stopping." to status.warn
66 +
                is PhoneRunner.State.Failed -> "Stopped: ${s.message}" to status.bad
67 +
            }
68 +
            Text(line, style = MaterialTheme.typography.bodyMedium, color = colour)
69 +
            error?.let { Text(it, style = MaterialTheme.typography.bodyMedium, color = status.bad) }
70 +
            Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) {
71 +
                when (state) {
72 +
                    PhoneRunner.State.Unregistered -> Button(
73 +
                        enabled = canWrite && !busy,
74 +
                        onClick = {
75 +
                            busy = true
76 +
                            error = null
77 +
                            scope.launch {
78 +
                                try {
79 +
                                    PhoneRunner.register(context, api, hub)
80 +
                                    start()
81 +
                                } catch (e: CancellationException) {
82 +
                                    throw e
83 +
                                } catch (e: Exception) {
84 +
                                    error = e.userMessage()
85 +
                                } finally {
86 +
                                    busy = false
87 +
                                }
88 +
                            }
89 +
                        },
90 +
                    ) { Text("Offer this phone as a runner") }
91 +
                    PhoneRunner.State.Running -> OutlinedButton(onClick = { PhoneRunner.drain("stopped by you") }) { Text("Stop") }
92 +
                    is PhoneRunner.State.Draining -> {}
93 +
                    else -> Button(onClick = { start() }) { Text("Start") }
94 +
                }
95 +
            }
96 +
            if (!canWrite && state == PhoneRunner.State.Unregistered) {
97 +
                Text("Sign in again to allow it: offering a runner needs repo:write.", style = MaterialTheme.typography.bodySmall)
98 +
            }
99 +
        }
100 +
    }
101 +
}
added app/src/main/java/io/oxygenhub/android/runner/RunnerService.kt +133 −0
1 +
package io.oxygenhub.android.runner
2 +
3 +
import android.app.Notification
4 +
import android.app.NotificationChannel
5 +
import android.app.NotificationManager
6 +
import android.app.PendingIntent
7 +
import android.app.Service
8 +
import android.content.BroadcastReceiver
9 +
import android.content.Context
10 +
import android.content.Intent
11 +
import android.content.IntentFilter
12 +
import android.content.pm.ServiceInfo
13 +
import android.net.ConnectivityManager
14 +
import android.net.Network
15 +
import android.net.NetworkCapabilities
16 +
import android.os.Build
17 +
import android.os.IBinder
18 +
import io.oxygenhub.android.MainActivity
19 +
import io.oxygenhub.android.R
20 +
import uniffi.rust_core.runnerServe
21 +
import uniffi.rust_core.runnerStop
22 +
23 +
/**
24 +
 * Runs the phone's OxygenFlow runner (#8) in the foreground, with a
25 +
 * notification saying so, while the phone is on charge and on Wi-Fi.
26 +
 * Leaving the charger or the network drains it: it claims nothing more,
27 +
 * finishes and reports the job it holds, and the service stops.
28 +
 */
29 +
class RunnerService : Service() {
30 +
    private var serving: Thread? = null
31 +
    private var connectivity: ConnectivityManager.NetworkCallback? = null
32 +
33 +
    private val power = object : BroadcastReceiver() {
34 +
        override fun onReceive(context: Context, intent: Intent) {
35 +
            PhoneRunner.drain("taken off charge")
36 +
            notify("Draining: taken off charge")
37 +
        }
38 +
    }
39 +
40 +
    override fun onBind(intent: Intent?): IBinder? = null
41 +
42 +
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
43 +
        // The special-use type is Android 14's; before it, the manifest's type stands.
44 +
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
45 +
            startForeground(NOTIFICATION, notification("Starting"), ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE)
46 +
        } else {
47 +
            startForeground(NOTIFICATION, notification("Starting"))
48 +
        }
49 +
        if (serving != null) return START_NOT_STICKY
50 +
        val blocked = PhoneRunner.blockedBy(this)
51 +
        if (blocked != null) {
52 +
            PhoneRunner.set(PhoneRunner.State.Waiting(blocked))
53 +
            stopSelf()
54 +
            return START_NOT_STICKY
55 +
        }
56 +
        registerReceiver(power, IntentFilter(Intent.ACTION_POWER_DISCONNECTED))
57 +
        watchNetwork()
58 +
        val home = PhoneRunner.home(this).path
59 +
        PhoneRunner.set(PhoneRunner.State.Running)
60 +
        notify("Waiting for WASM jobs, on charge and Wi-Fi")
61 +
        serving = Thread {
62 +
            try {
63 +
                runnerServe(home)
64 +
                if (PhoneRunner.state.value !is PhoneRunner.State.Waiting) PhoneRunner.set(PhoneRunner.State.Stopped)
65 +
            } catch (e: Exception) {
66 +
                PhoneRunner.set(PhoneRunner.State.Failed(e.message ?: "the runner stopped"))
67 +
            } finally {
68 +
                serving = null
69 +
                stopSelf()
70 +
            }
71 +
        }.apply {
72 +
            name = "oxygenflow-runner"
73 +
            start()
74 +
        }
75 +
        return START_NOT_STICKY
76 +
    }
77 +
78 +
    /** Off Wi-Fi (or onto a metered network): drain. */
79 +
    private fun watchNetwork() {
80 +
        val net = getSystemService(ConnectivityManager::class.java) ?: return
81 +
        val callback = object : ConnectivityManager.NetworkCallback() {
82 +
            override fun onLost(network: Network) {
83 +
                if (PhoneRunner.blockedBy(this@RunnerService) != null) {
84 +
                    PhoneRunner.drain("off Wi-Fi")
85 +
                    notify("Draining: off Wi-Fi")
86 +
                }
87 +
            }
88 +
89 +
            override fun onCapabilitiesChanged(network: Network, caps: NetworkCapabilities) {
90 +
                if (!caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)) {
91 +
                    PhoneRunner.drain("on a metered network")
92 +
                    notify("Draining: on a metered network")
93 +
                }
94 +
            }
95 +
        }
96 +
        net.registerDefaultNetworkCallback(callback)
97 +
        connectivity = callback
98 +
    }
99 +
100 +
    override fun onDestroy() {
101 +
        runCatching { unregisterReceiver(power) }
102 +
        connectivity?.let { cb -> runCatching { getSystemService(ConnectivityManager::class.java)?.unregisterNetworkCallback(cb) } }
103 +
        // Stopped from outside (the app, the system): drain rather than leave a job behind.
104 +
        if (serving != null) runnerStop()
105 +
        super.onDestroy()
106 +
    }
107 +
108 +
    private fun notify(text: String) {
109 +
        getSystemService(NotificationManager::class.java)?.notify(NOTIFICATION, notification(text))
110 +
    }
111 +
112 +
    private fun notification(text: String): Notification {
113 +
        val manager = getSystemService(NotificationManager::class.java)
114 +
        manager?.createNotificationChannel(
115 +
            NotificationChannel(CHANNEL, "OxygenFlow runner", NotificationManager.IMPORTANCE_LOW).apply {
116 +
                description = "While this phone runs OxygenFlow jobs"
117 +
            },
118 +
        )
119 +
        val open = PendingIntent.getActivity(this, 0, Intent(this, MainActivity::class.java), PendingIntent.FLAG_IMMUTABLE)
120 +
        return Notification.Builder(this, CHANNEL)
121 +
            .setSmallIcon(R.drawable.ic_launcher_monochrome)
122 +
            .setContentTitle("OxygenFlow runner")
123 +
            .setContentText(text)
124 +
            .setContentIntent(open)
125 +
            .setOngoing(true)
126 +
            .build()
127 +
    }
128 +
129 +
    private companion object {
130 +
        const val CHANNEL = "runner"
131 +
        const val NOTIFICATION = 8
132 +
    }
133 +
}
added oxygenflow +0 −0

No line changes.

modified .oxymodules +3 −0
1 1
[oxygen]
2 2
url = https://oxygenhub.io/andymccall/oxygen
3 3
4 +
[oxygenflow]
5 +
url = https://oxygenhub.io/andymccall/oxygenflow
6 +
modified CHANGELOG.md +1 −0
…
1 unchanged lines
2 2
3 3
## Unreleased
4 4
5 +
- **The phone as an OxygenFlow runner (#8, first part):** Account → OxygenFlow runner → *Offer this phone as a runner* asks the hub for a one-time token (`POST /api/v1/user/runner-token`) and registers the phone as a runner for your own repositories, labelled `android`, offering the WASM tier. The runner is OxygenFlow's own, built into the app through rust-core (OxygenFlow is a subrepo, `oxygenflow/`, and rust-core's oxy-core is the one it pins), running WASM modules in a thread with wasmtime. It runs in a foreground service with a notification, only while the phone is charging on Wi-Fi (an unmetered network); coming off charge or off Wi-Fi drains it (it takes nothing more and finishes its job). Start and Stop on the card. The app is larger: the runner and wasmtime are about 29 MB per architecture.
5 6
- **Proposals on the dashboard (#18):** Waiting for your review (open proposals by others in your repositories you have not reviewed) and Your proposals (your open ones and drafts), as the hub's dashboard lists them, each opening the proposal screen where it can be landed. From the hub's `GET /api/v1/user/proposals`; a hub without it shows neither.
6 7
- **Land proposals from the phone (#17):** a repository has Issues and Proposals tabs; proposals open (with drafts), landed, closed or all, each saying whether it is ready to land, what stands in the way, or that it will land when its checks pass. A proposal shows the landing card (Land into the target, after a confirmation; land when its checks pass, on or off; the hub's blockers in its own words, and its reason when it refuses), then its checks (failures first, each opening its run), sealed approvals and asked reviewers, its changes and description. Landing needs `repo:write`, which sign-in now asks for: a phone signed in before this reads only, and says so with a button to sign in again rather than failing.
7 8
- **A proper launcher icon (#15):** OxygenHub's mark, the hub's two joined rings in its cyan-to-blue gradient, on the app's night navy with a soft glow, as an adaptive icon (any launcher's mask, inside the safe zone) with a monochrome layer for themed icons; the default robot's bitmaps are gone. A rendered preview is in `docs/screenshots/launcher-icon.png`.
…
4 unchanged lines
modified app/src/main/AndroidManifest.xml +14 −0
…
2 unchanged lines
3 3
    xmlns:tools="http://schemas.android.com/tools">
4 4
5 5
    <uses-permission android:name="android.permission.INTERNET" />
6 +
    <!-- The phone as an OxygenFlow runner (#8): a foreground service while it runs jobs,
7 +
         its notification, and the network's state for the Wi-Fi rule. -->
8 +
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
9 +
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
10 +
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />
11 +
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
6 12
7 13
    <application
8 14
        android:name=".OxygenHubApp"
…
16 unchanged lines
25 31
                <category android:name="android.intent.category.LAUNCHER" />
26 32
            </intent-filter>
27 33
        </activity>
34 +
        <service
35 +
            android:name=".runner.RunnerService"
36 +
            android:exported="false"
37 +
            android:foregroundServiceType="specialUse">
38 +
            <property
39 +
                android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
40 +
                android:value="Runs OxygenFlow CI jobs (WebAssembly) for the signed-in account while the phone is charging on Wi-Fi" />
41 +
        </service>
28 42
    </application>
29 43
30 44
</manifest>
modified app/src/main/java/io/oxygenhub/android/api/HubClient.kt +5 −0
…
55 unchanged lines
56 56
    /** Land it by itself when its checks pass, or not (`repo:write`); the proposal after. */
57 57
    suspend fun setAutoLand(owner: String, name: String, number: Long, on: Boolean): Proposal
58 58
59 +
    /** A one-time token registering this phone as a runner for the account's repositories (`repo:write`). */
60 +
    suspend fun runnerToken(): RunnerToken
61 +
59 62
    /** An account's picture (`/avatar/{name}`, public); null when the hub has none this app can draw. */
60 63
    suspend fun avatar(name: String): Avatar?
61 64
}
…
21 unchanged lines
83 86
84 87
    override suspend fun inbox(limit: Int): Inbox =
85 88
        get(url("notifications") { addQueryParameter("limit", limit.coerceIn(1, 200).toString()) }, Inbox.serializer())
89 +
90 +
    override suspend fun runnerToken(): RunnerToken = send("POST", url("user", "runner-token"), RunnerToken.serializer())
86 91
87 92
    override suspend fun userProposals(): UserProposals = get("user/proposals", UserProposals.serializer())
88 93
…
109 unchanged lines
modified app/src/main/java/io/oxygenhub/android/api/Models.kt +7 −0
…
139 unchanged lines
140 140
    val name: String get() = repository.substringAfter('/')
141 141
}
142 142
143 +
/** `POST /api/v1/user/runner-token`: a one-time token that registers a runner for [owner]'s repositories. */
144 +
@Serializable
145 +
data class RunnerToken(val token: String, val owner: String = "") {
146 +
    // The token is a secret until it is used.
147 +
    override fun toString(): String = "RunnerToken(owner=$owner, token=<redacted>)"
148 +
}
149 +
143 150
/** A change a proposal adds. */
144 151
@Serializable
145 152
data class ProposalChange(
…
99 unchanged lines
modified app/src/main/java/io/oxygenhub/android/ui/account/AccountScreen.kt +4 −1
…
36 unchanged lines
37 37
import androidx.compose.ui.unit.dp
38 38
import io.oxygenhub.android.auth.Session
39 39
import io.oxygenhub.android.api.Avatar
40 +
import io.oxygenhub.android.api.HubApi
41 +
import io.oxygenhub.android.runner.RunnerCard
40 42
import io.oxygenhub.android.ui.common.AppScreen
41 43
import io.oxygenhub.android.ui.common.AvatarImage
42 44
import kotlinx.coroutines.launch
43 45
44 46
/** Who is signed in, to which hub, with what; and signing out. */
45 47
@Composable
46 -
fun AccountScreen(session: Session, avatar: Avatar?, nativeCore: () -> String, onSignOut: suspend () -> Unit) {
48 +
fun AccountScreen(session: Session, avatar: Avatar?, api: HubApi, nativeCore: () -> String, onSignOut: suspend () -> Unit) {
47 49
    var confirming by remember { mutableStateOf(false) }
48 50
    var signingOut by remember { mutableStateOf(false) }
49 51
    val scope = rememberCoroutineScope()
…
10 unchanged lines
60 62
                    Spacer(Modifier.height(8.dp))
61 63
                    Text(session.username, style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold)
62 64
                }
65 +
                RunnerCard(api, session.hub, session.canWrite)
63 66
                Card(Modifier.fillMaxWidth()) {
64 67
                    ListItem(
65 68
                        leadingContent = { Icon(Icons.Outlined.Dns, contentDescription = null) },
…
49 unchanged lines
modified app/src/main/java/io/oxygenhub/android/ui/nav/AppNavigation.kt +1 −1
…
167 unchanged lines
168 168
                )
169 169
            }
170 170
            composable<InboxRoute> { InboxScreen(inbox) }
171 -
            composable<AccountRoute> { AccountScreen(session, rememberAvatar(api, session.username), nativeCore, onSignOut) }
171 +
            composable<AccountRoute> { AccountScreen(session, rememberAvatar(api, session.username), api, nativeCore, onSignOut) }
172 172
        }
173 173
    }
174 174
}
…
9 unchanged lines
modified app/src/screenshotTest/kotlin/io/oxygenhub/android/Screenshots.kt +2 −0
…
96 unchanged lines
97 97
    override suspend fun markAllRead() {}
98 98
    override suspend fun revokeToken() {}
99 99
100 +
    override suspend fun runnerToken() = io.oxygenhub.android.api.RunnerToken("flowreg_sample", "ada")
101 +
100 102
    override suspend fun userProposals() = UserProposals(
101 103
        review = listOf(ProposalBrief("babbage/difference-engine", 12, "Carry the tens with a ratchet", "babbage", updatedMs = now - 2 * hour)),
102 104
        authored = listOf(ProposalBrief("ada/engine", 44, "Note G: loop the Bernoulli numbers", "ada", updatedMs = now - 5 * hour)),
…
93 unchanged lines
modified app/src/test/java/io/oxygenhub/android/FakeHubApi.kt +2 −0
…
56 unchanged lines
57 57
        calls += "read all"
58 58
        markAllRead.invoke()
59 59
    }
60 +
    var runnerToken: () -> io.oxygenhub.android.api.RunnerToken = { io.oxygenhub.android.api.RunnerToken("flowreg_test", "andymccall") }
61 +
    override suspend fun runnerToken() = runnerToken.invoke().also { calls += "runner token" }
60 62
    override suspend fun userProposals() = userProposals.invoke().also { calls += "user proposals" }
61 63
    override suspend fun proposals(owner: String, name: String, state: ProposalState): List<Proposal> =
62 64
        proposals.invoke(state).also { calls += "proposals $owner/$name ${state.query}" }
…
18 unchanged lines
modified app/src/test/java/io/oxygenhub/android/api/HubClientTest.kt +12 −0
…
96 unchanged lines
97 97
    }
98 98
99 99
    @Test
100 +
    fun aRunnerTokenIsAskedForWithThePost() = runTest {
101 +
        server.enqueue(MockResponse().setResponseCode(201).setHeader("Content-Type", "application/json").setBody("""{"token":"flowreg_abc","owner":"andymccall"}"""))
102 +
        val t = client().runnerToken()
103 +
        assertEquals("andymccall", t.owner)
104 +
        assertEquals("flowreg_abc", t.token)
105 +
        assertFalse("the token is not printed", t.toString().contains("flowreg_abc"))
106 +
        val req = server.takeRequest()
107 +
        assertEquals("POST" to "/api/v1/user/runner-token", req.method to req.path)
108 +
        assertEquals("Bearer oxy_secret", req.getHeader("Authorization"))
109 +
    }
110 +
111 +
    @Test
100 112
    fun repositories() = runTest {
101 113
        server.enqueue(json("repos.json"))
102 114
        assertEquals(3, client().repositories().size)
…
114 unchanged lines
modified rust-core/Cargo.lock +1638 −23
…
2 unchanged lines
3 3
version = 4
4 4
5 5
[[package]]
6 +
name = "addr2line"
7 +
version = "0.26.1"
8 +
source = "registry+https://github.com/rust-lang/crates.io-index"
9 +
checksum = "59317f77929f0e679d39364702289274de2f0f0b22cbf50b2b8cff2169a0b27a"
10 +
dependencies = [
11 +
 "gimli",
12 +
]
13 +
14 +
[[package]]
6 15
name = "adler2"
7 16
version = "2.0.1"
8 17
source = "registry+https://github.com/rust-lang/crates.io-index"
…
9 unchanged lines
18 27
]
19 28
20 29
[[package]]
30 +
name = "allocator-api2"
31 +
version = "0.2.21"
32 +
source = "registry+https://github.com/rust-lang/crates.io-index"
33 +
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
34 +
35 +
[[package]]
36 +
name = "ambient-authority"
37 +
version = "0.0.2"
38 +
source = "registry+https://github.com/rust-lang/crates.io-index"
39 +
checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b"
40 +
41 +
[[package]]
21 42
name = "anstream"
22 43
version = "1.0.0"
23 44
source = "registry+https://github.com/rust-lang/crates.io-index"
…
48 unchanged lines
72 93
version = "1.0.104"
73 94
source = "registry+https://github.com/rust-lang/crates.io-index"
74 95
checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
96 +
97 +
[[package]]
98 +
name = "arbitrary"
99 +
version = "1.5.0"
100 +
source = "registry+https://github.com/rust-lang/crates.io-index"
101 +
checksum = "3bc62ac97cc33321f50863d514c3bc38a453947a8f9e781137e47c7401020aed"
75 102
76 103
[[package]]
77 104
name = "arrayvec"
…
40 unchanged lines
118 145
checksum = "acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0"
119 146
dependencies = [
120 147
 "nom",
148 +
]
149 +
150 +
[[package]]
151 +
name = "asn1-rs"
152 +
version = "0.7.2"
153 +
source = "registry+https://github.com/rust-lang/crates.io-index"
154 +
checksum = "b7f43a50ac4fdca5df8e885c21b835997f0a1cdee65494a6847694a98652d9d8"
155 +
dependencies = [
156 +
 "asn1-rs-derive",
157 +
 "asn1-rs-impl",
158 +
 "displaydoc",
159 +
 "nom",
160 +
 "num-traits",
161 +
 "rusticata-macros",
162 +
 "thiserror 2.0.21",
163 +
 "time",
164 +
]
165 +
166 +
[[package]]
167 +
name = "asn1-rs-derive"
168 +
version = "0.6.0"
169 +
source = "registry+https://github.com/rust-lang/crates.io-index"
170 +
checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c"
171 +
dependencies = [
172 +
 "proc-macro2",
173 +
 "quote",
174 +
 "syn 2.0.119",
175 +
 "synstructure 0.13.2",
121 176
]
122 177
123 178
[[package]]
179 +
name = "asn1-rs-impl"
180 +
version = "0.2.0"
181 +
source = "registry+https://github.com/rust-lang/crates.io-index"
182 +
checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
183 +
dependencies = [
184 +
 "proc-macro2",
185 +
 "quote",
186 +
 "syn 2.0.119",
187 +
]
188 +
189 +
[[package]]
190 +
name = "async-trait"
191 +
version = "0.1.92"
192 +
source = "registry+https://github.com/rust-lang/crates.io-index"
193 +
checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667"
194 +
dependencies = [
195 +
 "proc-macro2",
196 +
 "quote",
197 +
 "syn 3.0.6",
198 +
]
199 +
200 +
[[package]]
124 201
name = "autocfg"
125 202
version = "1.5.1"
126 203
source = "registry+https://github.com/rust-lang/crates.io-index"
…
4 unchanged lines
131 208
version = "0.22.1"
132 209
source = "registry+https://github.com/rust-lang/crates.io-index"
133 210
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
211 +
212 +
[[package]]
213 +
name = "base64"
214 +
version = "0.23.1"
215 +
source = "registry+https://github.com/rust-lang/crates.io-index"
216 +
checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5"
134 217
135 218
[[package]]
136 219
name = "base64ct"
…
15 unchanged lines
152 235
version = "1.3.3"
153 236
source = "registry+https://github.com/rust-lang/crates.io-index"
154 237
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
238 +
dependencies = [
239 +
 "serde",
240 +
]
241 +
242 +
[[package]]
243 +
name = "bit-vec"
244 +
version = "0.9.1"
245 +
source = "registry+https://github.com/rust-lang/crates.io-index"
246 +
checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51"
155 247
dependencies = [
156 248
 "serde",
157 249
]
158 250
159 251
[[package]]
252 +
name = "bitflags"
253 +
version = "2.13.2"
254 +
source = "registry+https://github.com/rust-lang/crates.io-index"
255 +
checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
256 +
257 +
[[package]]
160 258
name = "blake3"
161 259
version = "1.8.7"
162 260
source = "registry+https://github.com/rust-lang/crates.io-index"
…
3 unchanged lines
166 264
 "cc",
167 265
 "cfg-if",
168 266
 "constant_time_eq",
169 -
 "cpufeatures",
267 +
 "cpufeatures 0.3.1",
170 268
 "rayon-core",
171 269
]
172 270
173 271
[[package]]
174 272
name = "block-buffer"
273 +
version = "0.10.4"
274 +
source = "registry+https://github.com/rust-lang/crates.io-index"
275 +
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
276 +
dependencies = [
277 +
 "generic-array",
278 +
]
279 +
280 +
[[package]]
281 +
name = "block-buffer"
175 282
version = "0.12.1"
176 283
source = "registry+https://github.com/rust-lang/crates.io-index"
177 284
checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
…
12 unchanged lines
190 297
]
191 298
192 299
[[package]]
300 +
name = "bumpalo"
301 +
version = "3.20.3"
302 +
source = "registry+https://github.com/rust-lang/crates.io-index"
303 +
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
304 +
dependencies = [
305 +
 "allocator-api2",
306 +
]
307 +
308 +
[[package]]
193 309
name = "bytes"
194 310
version = "1.12.1"
195 311
source = "registry+https://github.com/rust-lang/crates.io-index"
…
9 unchanged lines
205 321
]
206 322
207 323
[[package]]
324 +
name = "cap-primitives"
325 +
version = "4.0.3"
326 +
source = "registry+https://github.com/rust-lang/crates.io-index"
327 +
checksum = "8b5f74729fd2f44701d1a8eb47e906cdb3ccd9ec0f02baad85a744b791940b18"
328 +
dependencies = [
329 +
 "ambient-authority",
330 +
 "fs-set-times",
331 +
 "io-extras",
332 +
 "io-lifetimes 3.0.1",
333 +
 "ipnet",
334 +
 "maybe-owned",
335 +
 "rustix",
336 +
 "rustix-linux-procfs",
337 +
 "windows-sys 0.61.2",
338 +
 "winx",
339 +
]
340 +
341 +
[[package]]
208 342
name = "cargo-platform"
209 343
version = "0.1.9"
210 344
source = "registry+https://github.com/rust-lang/crates.io-index"
…
13 unchanged lines
224 358
 "semver",
225 359
 "serde",
226 360
 "serde_json",
227 -
 "thiserror",
361 +
 "thiserror 1.0.69",
228 362
]
229 363
230 364
[[package]]
…
13 unchanged lines
244 378
version = "1.0.5"
245 379
source = "registry+https://github.com/rust-lang/crates.io-index"
246 380
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
381 +
382 +
[[package]]
383 +
name = "chacha20"
384 +
version = "0.10.2"
385 +
source = "registry+https://github.com/rust-lang/crates.io-index"
386 +
checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
387 +
dependencies = [
388 +
 "cfg-if",
389 +
 "cpufeatures 0.3.1",
390 +
 "rand_core 0.10.1",
391 +
]
247 392
248 393
[[package]]
249 394
name = "clap"
…
42 unchanged lines
292 437
checksum = "0c9ea0ac24bc397ab3c98583a3c9ba74fa56b09a4449bbe172b9b1ddb016027a"
293 438
294 439
[[package]]
440 +
name = "cobs"
441 +
version = "0.3.0"
442 +
source = "registry+https://github.com/rust-lang/crates.io-index"
443 +
checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1"
444 +
dependencies = [
445 +
 "thiserror 2.0.21",
446 +
]
447 +
448 +
[[package]]
295 449
name = "colorchoice"
296 450
version = "1.0.5"
297 451
source = "registry+https://github.com/rust-lang/crates.io-index"
…
10 unchanged lines
308 462
version = "0.4.2"
309 463
source = "registry+https://github.com/rust-lang/crates.io-index"
310 464
checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"
465 +
466 +
[[package]]
467 +
name = "core_detect"
468 +
version = "1.0.0"
469 +
source = "registry+https://github.com/rust-lang/crates.io-index"
470 +
checksum = "7f8f80099a98041a3d1622845c271458a2d73e688351bf3cb999266764b81d48"
471 +
472 +
[[package]]
473 +
name = "cpp_demangle"
474 +
version = "0.5.1"
475 +
source = "registry+https://github.com/rust-lang/crates.io-index"
476 +
checksum = "0667304c32ea56cb4cd6d2d7c0cfe9a2f8041229db8c033af7f8d69492429def"
477 +
dependencies = [
478 +
 "cfg-if",
479 +
]
480 +
481 +
[[package]]
482 +
name = "cpufeatures"
483 +
version = "0.2.17"
484 +
source = "registry+https://github.com/rust-lang/crates.io-index"
485 +
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
486 +
dependencies = [
487 +
 "libc",
488 +
]
311 489
312 490
[[package]]
313 491
name = "cpufeatures"
…
2 unchanged lines
316 494
checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
317 495
dependencies = [
318 496
 "libc",
497 +
]
498 +
499 +
[[package]]
500 +
name = "cranelift-assembler-x64"
501 +
version = "0.136.4"
502 +
source = "registry+https://github.com/rust-lang/crates.io-index"
503 +
checksum = "c9c587da2696fbaa58e7a2fa2e5bfdd365d0928219f36992304ac1f15e5bc254"
504 +
dependencies = [
505 +
 "cranelift-assembler-x64-meta",
319 506
]
320 507
321 508
[[package]]
509 +
name = "cranelift-assembler-x64-meta"
510 +
version = "0.136.4"
511 +
source = "registry+https://github.com/rust-lang/crates.io-index"
512 +
checksum = "f28a60027b7556b680b051651291053ec381edf4ffbc01784997ae51a64269bb"
513 +
dependencies = [
514 +
 "cranelift-srcgen",
515 +
]
516 +
517 +
[[package]]
518 +
name = "cranelift-bforest"
519 +
version = "0.136.4"
520 +
source = "registry+https://github.com/rust-lang/crates.io-index"
521 +
checksum = "62bfdb846acebfd591d601994ea283c98d525ac0bc9a84ca3f2c36bcf5b69ff1"
522 +
dependencies = [
523 +
 "cranelift-entity",
524 +
 "wasmtime-internal-core",
525 +
]
526 +
527 +
[[package]]
528 +
name = "cranelift-bitset"
529 +
version = "0.136.4"
530 +
source = "registry+https://github.com/rust-lang/crates.io-index"
531 +
checksum = "aa9f8cc1080739d5f72b4ee7e00aff7d589f1284beaf0a19472c07878be7f299"
532 +
dependencies = [
533 +
 "serde",
534 +
 "serde_derive",
535 +
 "wasmtime-internal-core",
536 +
]
537 +
538 +
[[package]]
539 +
name = "cranelift-codegen"
540 +
version = "0.136.4"
541 +
source = "registry+https://github.com/rust-lang/crates.io-index"
542 +
checksum = "d85417d493ecec833b5134546b4a252c78cc0bd5be11729a35d25dcff9e4e70b"
543 +
dependencies = [
544 +
 "bumpalo",
545 +
 "cranelift-assembler-x64",
546 +
 "cranelift-bforest",
547 +
 "cranelift-bitset",
548 +
 "cranelift-codegen-meta",
549 +
 "cranelift-codegen-shared",
550 +
 "cranelift-control",
551 +
 "cranelift-entity",
552 +
 "cranelift-isle",
553 +
 "gimli",
554 +
 "hashbrown 0.17.1",
555 +
 "libm",
556 +
 "log",
557 +
 "postcard",
558 +
 "pulley-interpreter",
559 +
 "regalloc2",
560 +
 "rustc-hash",
561 +
 "serde",
562 +
 "serde_derive",
563 +
 "sha2 0.10.9",
564 +
 "smallvec",
565 +
 "target-lexicon",
566 +
 "wasmtime-internal-core",
567 +
]
568 +
569 +
[[package]]
570 +
name = "cranelift-codegen-meta"
571 +
version = "0.136.4"
572 +
source = "registry+https://github.com/rust-lang/crates.io-index"
573 +
checksum = "d01c8ed0098360bae69ad6b82952d4247516799ce8050d45ad168d6689f4eae6"
574 +
dependencies = [
575 +
 "cranelift-assembler-x64-meta",
576 +
 "cranelift-codegen-shared",
577 +
 "cranelift-srcgen",
578 +
 "heck",
579 +
 "pulley-interpreter",
580 +
]
581 +
582 +
[[package]]
583 +
name = "cranelift-codegen-shared"
584 +
version = "0.136.4"
585 +
source = "registry+https://github.com/rust-lang/crates.io-index"
586 +
checksum = "04f9b86d809cec9c4e88b201f1b3ed3b0347674c9ccfbb8c355228669e34be81"
587 +
588 +
[[package]]
589 +
name = "cranelift-control"
590 +
version = "0.136.4"
591 +
source = "registry+https://github.com/rust-lang/crates.io-index"
592 +
checksum = "ce182038fb10b719841e65fdf5deeee258c684f63439f5be680c2be059274b58"
593 +
dependencies = [
594 +
 "arbitrary",
595 +
]
596 +
597 +
[[package]]
598 +
name = "cranelift-entity"
599 +
version = "0.136.4"
600 +
source = "registry+https://github.com/rust-lang/crates.io-index"
601 +
checksum = "7bca812b03a7b942796391f25bc02aa70a1a007fee3ce2756490c788429e9c39"
602 +
dependencies = [
603 +
 "cranelift-bitset",
604 +
 "serde",
605 +
 "serde_derive",
606 +
 "wasmtime-internal-core",
607 +
]
608 +
609 +
[[package]]
610 +
name = "cranelift-frontend"
611 +
version = "0.136.4"
612 +
source = "registry+https://github.com/rust-lang/crates.io-index"
613 +
checksum = "a0c30563d2aef95e8d1a00a920199c99117b350339599f0e9487a7a1cf5d59de"
614 +
dependencies = [
615 +
 "cranelift-codegen",
616 +
 "hashbrown 0.17.1",
617 +
 "log",
618 +
 "smallvec",
619 +
 "target-lexicon",
620 +
]
621 +
622 +
[[package]]
623 +
name = "cranelift-isle"
624 +
version = "0.136.4"
625 +
source = "registry+https://github.com/rust-lang/crates.io-index"
626 +
checksum = "9c54184333a275698edb1d3bdff226131a25d47133d792aa716e47e32b8b7f05"
627 +
628 +
[[package]]
629 +
name = "cranelift-native"
630 +
version = "0.136.4"
631 +
source = "registry+https://github.com/rust-lang/crates.io-index"
632 +
checksum = "eb67a4c8a3180b5f1d77dffcd6317c05386ced42e5a31c7004523a9d99dc85c1"
633 +
dependencies = [
634 +
 "cranelift-codegen",
635 +
 "libc",
636 +
 "target-lexicon",
637 +
]
638 +
639 +
[[package]]
640 +
name = "cranelift-srcgen"
641 +
version = "0.136.4"
642 +
source = "registry+https://github.com/rust-lang/crates.io-index"
643 +
checksum = "b533db1679b4b728568bd490da6533cf50974c48a4d7534e78f1e0e02bc39769"
644 +
645 +
[[package]]
322 646
name = "crc32fast"
323 647
version = "1.5.2"
324 648
source = "registry+https://github.com/rust-lang/crates.io-index"
…
29 unchanged lines
354 678
355 679
[[package]]
356 680
name = "crypto-common"
681 +
version = "0.1.7"
682 +
source = "registry+https://github.com/rust-lang/crates.io-index"
683 +
checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a"
684 +
dependencies = [
685 +
 "generic-array",
686 +
 "typenum",
687 +
]
688 +
689 +
[[package]]
690 +
name = "crypto-common"
357 691
version = "0.2.2"
358 692
source = "registry+https://github.com/rust-lang/crates.io-index"
359 693
checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
…
19 unchanged lines
379 713
checksum = "b5eed333089e2e1c1ac8c6c0398e5e2497b4c9926ca6d0365ed1e099afa5bc23"
380 714
dependencies = [
381 715
 "cfg-if",
382 -
 "cpufeatures",
716 +
 "cpufeatures 0.3.1",
383 717
 "curve25519-dalek-derive",
384 -
 "digest",
718 +
 "digest 0.11.3",
385 719
 "fiat-crypto",
386 720
 "rustc_version",
387 721
 "subtle",
…
10 unchanged lines
398 732
 "quote",
399 733
 "syn 2.0.119",
400 734
]
735 +
736 +
[[package]]
737 +
name = "data-encoding"
738 +
version = "2.11.1"
739 +
source = "registry+https://github.com/rust-lang/crates.io-index"
740 +
checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06"
401 741
402 742
[[package]]
403 743
name = "der"
…
3 unchanged lines
407 747
dependencies = [
408 748
 "const-oid",
409 749
 "zeroize",
750 +
]
751 +
752 +
[[package]]
753 +
name = "der-parser"
754 +
version = "10.0.0"
755 +
source = "registry+https://github.com/rust-lang/crates.io-index"
756 +
checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6"
757 +
dependencies = [
758 +
 "asn1-rs",
759 +
 "displaydoc",
760 +
 "nom",
761 +
 "num-bigint",
762 +
 "num-traits",
763 +
 "rusticata-macros",
410 764
]
411 765
412 766
[[package]]
767 +
name = "deranged"
768 +
version = "0.5.9"
769 +
source = "registry+https://github.com/rust-lang/crates.io-index"
770 +
checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e"
771 +
772 +
[[package]]
773 +
name = "digest"
774 +
version = "0.10.7"
775 +
source = "registry+https://github.com/rust-lang/crates.io-index"
776 +
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
777 +
dependencies = [
778 +
 "block-buffer 0.10.4",
779 +
 "crypto-common 0.1.7",
780 +
]
781 +
782 +
[[package]]
413 783
name = "digest"
414 784
version = "0.11.3"
415 785
source = "registry+https://github.com/rust-lang/crates.io-index"
416 786
checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
417 787
dependencies = [
418 -
 "block-buffer",
419 -
 "crypto-common",
788 +
 "block-buffer 0.12.1",
789 +
 "const-oid",
790 +
 "crypto-common 0.2.2",
420 791
]
421 792
422 793
[[package]]
…
24 unchanged lines
447 818
dependencies = [
448 819
 "curve25519-dalek",
449 820
 "ed25519",
450 -
 "sha2",
821 +
 "sha2 0.11.0",
451 822
 "subtle",
452 823
 "zeroize",
453 824
]
…
3 unchanged lines
457 828
version = "1.18.0"
458 829
source = "registry+https://github.com/rust-lang/crates.io-index"
459 830
checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34"
831 +
832 +
[[package]]
833 +
name = "embedded-io"
834 +
version = "0.4.0"
835 +
source = "registry+https://github.com/rust-lang/crates.io-index"
836 +
checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
837 +
838 +
[[package]]
839 +
name = "embedded-io"
840 +
version = "0.6.1"
841 +
source = "registry+https://github.com/rust-lang/crates.io-index"
842 +
checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d"
843 +
844 +
[[package]]
845 +
name = "encoding_rs"
846 +
version = "0.8.42"
847 +
source = "registry+https://github.com/rust-lang/crates.io-index"
848 +
checksum = "8e985e0451871ad22fb8d2b6b076e2028a502a0d3950998c2c5c0a4f9b5d9679"
849 +
dependencies = [
850 +
 "cfg-if",
851 +
 "core_detect",
852 +
 "multiversion_no_op",
853 +
 "rustversion",
854 +
 "scopeguard",
855 +
 "simdutf8",
856 +
]
857 +
858 +
[[package]]
859 +
name = "equivalent"
860 +
version = "1.0.3"
861 +
source = "registry+https://github.com/rust-lang/crates.io-index"
862 +
checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
863 +
864 +
[[package]]
865 +
name = "errno"
866 +
version = "0.3.14"
867 +
source = "registry+https://github.com/rust-lang/crates.io-index"
868 +
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
869 +
dependencies = [
870 +
 "libc",
871 +
 "windows-sys 0.61.2",
872 +
]
460 873
461 874
[[package]]
462 875
name = "fiat-crypto"
…
16 unchanged lines
479 892
 "crc32fast",
480 893
 "miniz_oxide",
481 894
 "zlib-rs",
895 +
]
896 +
897 +
[[package]]
898 +
name = "flow"
899 +
version = "0.3.1"
900 +
dependencies = [
901 +
 "anyhow",
902 +
 "blake3",
903 +
 "clap",
904 +
 "flow-core",
905 +
 "flow-init",
906 +
 "hex",
907 +
 "ignore",
908 +
 "jet",
909 +
 "libc",
910 +
 "oxy-core",
911 +
 "rcgen",
912 +
 "rustls",
913 +
 "serde",
914 +
 "serde_json",
915 +
 "toml 0.8.23",
916 +
 "ureq",
917 +
 "wasmtime",
918 +
 "wasmtime-wasi",
919 +
]
920 +
921 +
[[package]]
922 +
name = "flow-core"
923 +
version = "0.3.1"
924 +
dependencies = [
925 +
 "blake3",
926 +
 "globset",
927 +
 "hex",
928 +
 "kdl",
929 +
 "miette",
930 +
 "oxy-core",
931 +
 "serde",
932 +
 "serde_json",
933 +
 "thiserror 1.0.69",
482 934
]
483 935
484 936
[[package]]
937 +
name = "flow-init"
938 +
version = "0.3.1"
939 +
dependencies = [
940 +
 "libc",
941 +
 "serde",
942 +
 "serde_json",
943 +
]
944 +
945 +
[[package]]
946 +
name = "fnv"
947 +
version = "1.0.7"
948 +
source = "registry+https://github.com/rust-lang/crates.io-index"
949 +
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
950 +
951 +
[[package]]
952 +
name = "foldhash"
953 +
version = "0.2.0"
954 +
source = "registry+https://github.com/rust-lang/crates.io-index"
955 +
checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
956 +
957 +
[[package]]
485 958
name = "form_urlencoded"
486 959
version = "1.2.2"
487 960
source = "registry+https://github.com/rust-lang/crates.io-index"
…
12 unchanged lines
500 973
]
501 974
502 975
[[package]]
976 +
name = "fs-set-times"
977 +
version = "0.20.3"
978 +
source = "registry+https://github.com/rust-lang/crates.io-index"
979 +
checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a"
980 +
dependencies = [
981 +
 "io-lifetimes 2.0.4",
982 +
 "rustix",
983 +
 "windows-sys 0.52.0",
984 +
]
985 +
986 +
[[package]]
987 +
name = "futures"
988 +
version = "0.3.34"
989 +
source = "registry+https://github.com/rust-lang/crates.io-index"
990 +
checksum = "9a31d2a3fbaaeb2af2368bbdd904aa8e812d3c04a1ee10d3171f52d556e5d0a3"
991 +
dependencies = [
992 +
 "futures-channel",
993 +
 "futures-core",
994 +
 "futures-io",
995 +
 "futures-sink",
996 +
 "futures-task",
997 +
 "futures-util",
998 +
]
999 +
1000 +
[[package]]
1001 +
name = "futures-channel"
1002 +
version = "0.3.34"
1003 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1004 +
checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4"
1005 +
dependencies = [
1006 +
 "futures-core",
1007 +
 "futures-sink",
1008 +
]
1009 +
1010 +
[[package]]
1011 +
name = "futures-core"
1012 +
version = "0.3.34"
1013 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1014 +
checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
1015 +
1016 +
[[package]]
1017 +
name = "futures-io"
1018 +
version = "0.3.34"
1019 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1020 +
checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed"
1021 +
1022 +
[[package]]
1023 +
name = "futures-sink"
1024 +
version = "0.3.34"
1025 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1026 +
checksum = "1944426bf7d03f1d14f708785e4b33efd750b36d48a157b836b3efc15ede8e1d"
1027 +
1028 +
[[package]]
1029 +
name = "futures-task"
1030 +
version = "0.3.34"
1031 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1032 +
checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
1033 +
1034 +
[[package]]
1035 +
name = "futures-util"
1036 +
version = "0.3.34"
1037 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1038 +
checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
1039 +
dependencies = [
1040 +
 "futures-channel",
1041 +
 "futures-core",
1042 +
 "futures-io",
1043 +
 "futures-sink",
1044 +
 "futures-task",
1045 +
 "memchr",
1046 +
 "pin-project-lite",
1047 +
 "slab",
1048 +
]
1049 +
1050 +
[[package]]
1051 +
name = "generic-array"
1052 +
version = "0.14.7"
1053 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1054 +
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
1055 +
dependencies = [
1056 +
 "typenum",
1057 +
 "version_check",
1058 +
]
1059 +
1060 +
[[package]]
503 1061
name = "getrandom"
504 1062
version = "0.2.17"
505 1063
source = "registry+https://github.com/rust-lang/crates.io-index"
…
14 unchanged lines
520 1078
 "libc",
521 1079
 "r-efi",
522 1080
 "rand_core 0.10.1",
1081 +
]
1082 +
1083 +
[[package]]
1084 +
name = "gimli"
1085 +
version = "0.33.0"
1086 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1087 +
checksum = "0bf7f043f89559805f8c7cacc432749b2fa0d0a0a9ee46ce47164ed5ba7f126c"
1088 +
dependencies = [
1089 +
 "fnv",
1090 +
 "hashbrown 0.16.1",
1091 +
 "indexmap",
1092 +
 "stable_deref_trait",
523 1093
]
524 1094
525 1095
[[package]]
…
24 unchanged lines
550 1120
 "log",
551 1121
 "plain",
552 1122
 "scroll",
1123 +
]
1124 +
1125 +
[[package]]
1126 +
name = "hashbrown"
1127 +
version = "0.16.1"
1128 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1129 +
checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
1130 +
1131 +
[[package]]
1132 +
name = "hashbrown"
1133 +
version = "0.17.1"
1134 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1135 +
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
1136 +
dependencies = [
1137 +
 "foldhash",
1138 +
 "serde",
1139 +
 "serde_core",
553 1140
]
554 1141
555 1142
[[package]]
…
100 unchanged lines
656 1243
 "zerotrie",
657 1244
 "zerovec",
658 1245
]
1246 +
1247 +
[[package]]
1248 +
name = "id-arena"
1249 +
version = "2.3.0"
1250 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1251 +
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
659 1252
660 1253
[[package]]
661 1254
name = "idna"
…
33 unchanged lines
695 1288
]
696 1289
697 1290
[[package]]
1291 +
name = "indexmap"
1292 +
version = "2.14.2"
1293 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1294 +
checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"
1295 +
dependencies = [
1296 +
 "equivalent",
1297 +
 "hashbrown 0.17.1",
1298 +
 "serde",
1299 +
 "serde_core",
1300 +
]
1301 +
1302 +
[[package]]
1303 +
name = "io-extras"
1304 +
version = "0.19.0"
1305 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1306 +
checksum = "20fd6de4ccfcc187e38bc21cfa543cb5a302cb86a8b114eb7f0bf0dc9f8ac00f"
1307 +
dependencies = [
1308 +
 "io-lifetimes 3.0.1",
1309 +
 "windows-sys 0.52.0",
1310 +
]
1311 +
1312 +
[[package]]
1313 +
name = "io-lifetimes"
1314 +
version = "2.0.4"
1315 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1316 +
checksum = "06432fb54d3be7964ecd3649233cddf80db2832f47fec34c01f65b3d9d774983"
1317 +
1318 +
[[package]]
1319 +
name = "io-lifetimes"
1320 +
version = "3.0.1"
1321 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1322 +
checksum = "2f0fb0570afe1fed943c5c3d4102d5358592d8625fda6a0007fdbe65a92fba96"
1323 +
1324 +
[[package]]
1325 +
name = "ipnet"
1326 +
version = "2.12.2"
1327 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1328 +
checksum = "791930b43c0d5973160d90a8f3894509f2b273430f5c5c73b668636d0287c5c0"
1329 +
1330 +
[[package]]
698 1331
name = "is_terminal_polyfill"
699 1332
version = "1.70.2"
700 1333
source = "registry+https://github.com/rust-lang/crates.io-index"
701 1334
checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695"
1335 +
1336 +
[[package]]
1337 +
name = "itertools"
1338 +
version = "0.14.0"
1339 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1340 +
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
1341 +
dependencies = [
1342 +
 "either",
1343 +
]
702 1344
703 1345
[[package]]
704 1346
name = "itoa"
…
2 unchanged lines
707 1349
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
708 1350
709 1351
[[package]]
1352 +
name = "jet"
1353 +
version = "0.3.1"
1354 +
dependencies = [
1355 +
 "blake3",
1356 +
 "hex",
1357 +
 "oxy-core",
1358 +
 "serde",
1359 +
 "serde_json",
1360 +
 "thiserror 1.0.69",
1361 +
]
1362 +
1363 +
[[package]]
710 1364
name = "jobserver"
711 1365
version = "0.1.35"
712 1366
source = "registry+https://github.com/rust-lang/crates.io-index"
…
1 unchanged lines
714 1368
dependencies = [
715 1369
 "getrandom 0.4.3",
716 1370
 "libc",
1371 +
]
1372 +
1373 +
[[package]]
1374 +
name = "kdl"
1375 +
version = "6.7.1"
1376 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1377 +
checksum = "082ddf81b2acd76fe04412655d17befedfff1837db772f8e74c38050d25ed670"
1378 +
dependencies = [
1379 +
 "miette",
1380 +
 "num-traits",
1381 +
 "serde",
1382 +
 "winnow",
717 1383
]
718 1384
719 1385
[[package]]
…
3 unchanged lines
723 1389
checksum = "d8f198d1db720e4940b5a493201d199d9f24f568f8f746bd13706243a2f71598"
724 1390
dependencies = [
725 1391
 "cfg-if",
726 -
 "cpufeatures",
1392 +
 "cpufeatures 0.3.1",
727 1393
]
1394 +
1395 +
[[package]]
1396 +
name = "lazy_static"
1397 +
version = "1.5.1"
1398 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1399 +
checksum = "20870f649af7073d53e38067b2a84312175d56ea15217e1b15bc83506ec50afb"
1400 +
1401 +
[[package]]
1402 +
name = "leb128"
1403 +
version = "0.2.7"
1404 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1405 +
checksum = "c83bff1d572d6b9aeef67ddfc8448e4a3737909cb28e81f97c791b9018703e52"
1406 +
1407 +
[[package]]
1408 +
name = "leb128fmt"
1409 +
version = "0.1.0"
1410 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1411 +
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
728 1412
729 1413
[[package]]
730 1414
name = "libc"
731 1415
version = "0.2.189"
732 1416
source = "registry+https://github.com/rust-lang/crates.io-index"
733 1417
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
1418 +
1419 +
[[package]]
1420 +
name = "libm"
1421 +
version = "0.2.16"
1422 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1423 +
checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
1424 +
1425 +
[[package]]
1426 +
name = "linux-raw-sys"
1427 +
version = "0.12.1"
1428 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1429 +
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
734 1430
735 1431
[[package]]
736 1432
name = "litemap"
…
6 unchanged lines
743 1439
version = "0.4.34"
744 1440
source = "registry+https://github.com/rust-lang/crates.io-index"
745 1441
checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6"
1442 +
1443 +
[[package]]
1444 +
name = "mach2"
1445 +
version = "0.6.0"
1446 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1447 +
checksum = "dae608c151f68243f2b000364e1f7b186d9c29845f7d2d85bd31b9ad77ad552b"
746 1448
747 1449
[[package]]
1450 +
name = "maybe-owned"
1451 +
version = "0.3.4"
1452 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1453 +
checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
1454 +
1455 +
[[package]]
748 1456
name = "memchr"
749 1457
version = "2.8.3"
750 1458
source = "registry+https://github.com/rust-lang/crates.io-index"
751 1459
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
1460 +
1461 +
[[package]]
1462 +
name = "memfd"
1463 +
version = "0.6.6"
1464 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1465 +
checksum = "57804b2c9b69967f1536a56f86297e367a33b19e98852ed624b84551cdbc0d90"
1466 +
dependencies = [
1467 +
 "rustix",
1468 +
]
1469 +
1470 +
[[package]]
1471 +
name = "miette"
1472 +
version = "7.6.0"
1473 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1474 +
checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7"
1475 +
dependencies = [
1476 +
 "cfg-if",
1477 +
 "miette-derive",
1478 +
 "unicode-width 0.1.14",
1479 +
]
1480 +
1481 +
[[package]]
1482 +
name = "miette-derive"
1483 +
version = "7.6.0"
1484 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1485 +
checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b"
1486 +
dependencies = [
1487 +
 "proc-macro2",
1488 +
 "quote",
1489 +
 "syn 2.0.119",
1490 +
]
752 1491
753 1492
[[package]]
754 1493
name = "mime"
…
28 unchanged lines
783 1522
]
784 1523
785 1524
[[package]]
1525 +
name = "mio"
1526 +
version = "1.2.4"
1527 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1528 +
checksum = "1788edb87fdc09c7e26304471e2f5be8cdefb1b6930d6e3985fc02ff53bf86ee"
1529 +
dependencies = [
1530 +
 "libc",
1531 +
 "wasi",
1532 +
 "windows-sys 0.61.2",
1533 +
]
1534 +
1535 +
[[package]]
786 1536
name = "ml-dsa"
787 1537
version = "0.1.1"
788 1538
source = "registry+https://github.com/rust-lang/crates.io-index"
789 1539
checksum = "add6b9d92e496f16f4526d68ff29da1483aba4b119baeab8bed3b9e3544a6f3d"
790 1540
dependencies = [
791 1541
 "const-oid",
792 -
 "crypto-common",
1542 +
 "crypto-common 0.2.2",
793 1543
 "ctutils",
794 1544
 "hybrid-array",
795 1545
 "module-lattice",
…
14 unchanged lines
810 1560
]
811 1561
812 1562
[[package]]
1563 +
name = "multiversion_no_op"
1564 +
version = "1.0.0"
1565 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1566 +
checksum = "743fb55ba31b18fb1ecef6bdc9aa2743314978ac084044301a7eee33fb99a20d"
1567 +
1568 +
[[package]]
813 1569
name = "nom"
814 1570
version = "7.1.3"
815 1571
source = "registry+https://github.com/rust-lang/crates.io-index"
…
1 unchanged lines
817 1573
dependencies = [
818 1574
 "memchr",
819 1575
 "minimal-lexical",
1576 +
]
1577 +
1578 +
[[package]]
1579 +
name = "num-bigint"
1580 +
version = "0.4.8"
1581 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1582 +
checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367"
1583 +
dependencies = [
1584 +
 "num-integer",
1585 +
 "num-traits",
1586 +
]
1587 +
1588 +
[[package]]
1589 +
name = "num-conv"
1590 +
version = "0.2.2"
1591 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1592 +
checksum = "521739c6d2bac4aa25192232afe6841231376b2b26d4d9fae5ecf8ca5772e441"
1593 +
1594 +
[[package]]
1595 +
name = "num-integer"
1596 +
version = "0.1.47"
1597 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1598 +
checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b"
1599 +
dependencies = [
1600 +
 "num-traits",
820 1601
]
821 1602
822 1603
[[package]]
…
6 unchanged lines
829 1610
]
830 1611
831 1612
[[package]]
1613 +
name = "object"
1614 +
version = "0.40.0"
1615 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1616 +
checksum = "dd229a0361b9d0d4396176e02d65897f487eebeab7caa6d443855ee152ca0b9c"
1617 +
dependencies = [
1618 +
 "crc32fast",
1619 +
 "hashbrown 0.17.1",
1620 +
 "indexmap",
1621 +
 "memchr",
1622 +
]
1623 +
1624 +
[[package]]
1625 +
name = "oid-registry"
1626 +
version = "0.8.1"
1627 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1628 +
checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7"
1629 +
dependencies = [
1630 +
 "asn1-rs",
1631 +
]
1632 +
1633 +
[[package]]
832 1634
name = "once_cell"
833 1635
version = "1.21.4"
834 1636
source = "registry+https://github.com/rust-lang/crates.io-index"
…
7 unchanged lines
842 1644
843 1645
[[package]]
844 1646
name = "oxy-core"
845 -
version = "0.1.0"
1647 +
version = "0.6.0"
846 1648
dependencies = [
847 1649
 "blake3",
848 1650
 "ed25519-dalek",
849 1651
 "globset",
850 1652
 "hex",
851 1653
 "ignore",
1654 +
 "libc",
1655 +
 "memchr",
852 1656
 "ml-dsa",
853 -
 "rand",
1657 +
 "rand 0.8.8",
854 1658
 "rayon",
855 1659
 "rustls",
856 1660
 "rustls-pemfile",
1661 +
 "serde_json",
1662 +
 "sha2 0.11.0",
857 1663
 "similar",
858 -
 "thiserror",
1664 +
 "thiserror 1.0.69",
859 1665
 "ureq",
860 1666
 "webpki-roots 1.0.9",
861 1667
 "zstd",
…
4 unchanged lines
866 1672
version = "1.0.15"
867 1673
source = "registry+https://github.com/rust-lang/crates.io-index"
868 1674
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
1675 +
1676 +
[[package]]
1677 +
name = "pem"
1678 +
version = "4.0.0"
1679 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1680 +
checksum = "d354a98a3d1251555de99e8fdd8afda05573c31b82f59063a7b0a29b5527f120"
1681 +
dependencies = [
1682 +
 "base64 0.23.1",
1683 +
 "serde_core",
1684 +
]
869 1685
870 1686
[[package]]
871 1687
name = "percent-encoding"
…
2 unchanged lines
874 1690
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
875 1691
876 1692
[[package]]
1693 +
name = "pin-project-lite"
1694 +
version = "0.2.17"
1695 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1696 +
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
1697 +
1698 +
[[package]]
877 1699
name = "pkcs8"
878 1700
version = "0.11.0"
879 1701
source = "registry+https://github.com/rust-lang/crates.io-index"
…
14 unchanged lines
894 1716
version = "0.2.3"
895 1717
source = "registry+https://github.com/rust-lang/crates.io-index"
896 1718
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
1719 +
1720 +
[[package]]
1721 +
name = "postcard"
1722 +
version = "1.1.3"
1723 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1724 +
checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24"
1725 +
dependencies = [
1726 +
 "cobs",
1727 +
 "embedded-io 0.4.0",
1728 +
 "embedded-io 0.6.1",
1729 +
 "serde",
1730 +
]
897 1731
898 1732
[[package]]
899 1733
name = "potential_utf"
…
3 unchanged lines
903 1737
dependencies = [
904 1738
 "zerovec",
905 1739
]
1740 +
1741 +
[[package]]
1742 +
name = "powerfmt"
1743 +
version = "0.2.1"
1744 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1745 +
checksum = "4a6394b9e965e73d0a289ee54f589087e2c676aedf60885baf52c76b771e4958"
906 1746
907 1747
[[package]]
908 1748
name = "ppv-lite86"
…
14 unchanged lines
923 1763
]
924 1764
925 1765
[[package]]
1766 +
name = "pulley-interpreter"
1767 +
version = "49.0.4"
1768 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1769 +
checksum = "5cd3de43f4f4cff536de8902097edbdf749321b97dda548f36a37918eb85bba3"
1770 +
dependencies = [
1771 +
 "cranelift-bitset",
1772 +
 "log",
1773 +
 "pulley-macros",
1774 +
 "wasmtime-internal-core",
1775 +
]
1776 +
1777 +
[[package]]
1778 +
name = "pulley-macros"
1779 +
version = "49.0.4"
1780 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1781 +
checksum = "8319a8fa5269b4895957f8795861c42822bd26218e495f70060a963323d94847"
1782 +
dependencies = [
1783 +
 "proc-macro2",
1784 +
 "quote",
1785 +
 "syn 2.0.119",
1786 +
]
1787 +
1788 +
[[package]]
926 1789
name = "quote"
927 1790
version = "1.0.47"
928 1791
source = "registry+https://github.com/rust-lang/crates.io-index"
…
20 unchanged lines
949 1812
]
950 1813
951 1814
[[package]]
1815 +
name = "rand"
1816 +
version = "0.10.3"
1817 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1818 +
checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
1819 +
dependencies = [
1820 +
 "chacha20",
1821 +
 "getrandom 0.4.3",
1822 +
 "rand_core 0.10.1",
1823 +
]
1824 +
1825 +
[[package]]
952 1826
name = "rand_chacha"
953 1827
version = "0.3.1"
954 1828
source = "registry+https://github.com/rust-lang/crates.io-index"
…
36 unchanged lines
991 1865
dependencies = [
992 1866
 "crossbeam-deque",
993 1867
 "crossbeam-utils",
1868 +
]
1869 +
1870 +
[[package]]
1871 +
name = "rcgen"
1872 +
version = "0.14.10"
1873 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1874 +
checksum = "8774e05a7d0de114588e6a28fe7e71694b82614ed569d86d8b389dfbc98b8ad8"
1875 +
dependencies = [
1876 +
 "pem",
1877 +
 "ring",
1878 +
 "rustls-pki-types",
1879 +
 "time",
1880 +
 "x509-parser",
1881 +
 "yasna",
994 1882
]
995 1883
996 1884
[[package]]
1885 +
name = "regalloc2"
1886 +
version = "0.15.2"
1887 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1888 +
checksum = "757712e8e61590d6d4f5d563483755538b5aa13467837a3b41cd9832509a7f85"
1889 +
dependencies = [
1890 +
 "allocator-api2",
1891 +
 "bumpalo",
1892 +
 "hashbrown 0.17.1",
1893 +
 "log",
1894 +
 "rustc-hash",
1895 +
 "serde",
1896 +
 "smallvec",
1897 +
]
1898 +
1899 +
[[package]]
997 1900
name = "regex-automata"
998 1901
version = "0.4.18"
999 1902
source = "registry+https://github.com/rust-lang/crates.io-index"
…
28 unchanged lines
1028 1931
name = "rust-core"
1029 1932
version = "0.1.0"
1030 1933
dependencies = [
1934 +
 "anyhow",
1935 +
 "flow",
1031 1936
 "oxy-core",
1032 1937
 "uniffi",
1033 1938
]
1939 +
1940 +
[[package]]
1941 +
name = "rustc-demangle"
1942 +
version = "0.1.28"
1943 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1944 +
checksum = "b74b56ffa8bb2830709a538c2cbcae9aa062db0d2a42563bfb09bdaae44020eb"
1945 +
1946 +
[[package]]
1947 +
name = "rustc-hash"
1948 +
version = "2.1.3"
1949 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1950 +
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
1034 1951
1035 1952
[[package]]
1036 1953
name = "rustc_version"
…
2 unchanged lines
1039 1956
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
1040 1957
dependencies = [
1041 1958
 "semver",
1959 +
]
1960 +
1961 +
[[package]]
1962 +
name = "rusticata-macros"
1963 +
version = "4.1.0"
1964 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1965 +
checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632"
1966 +
dependencies = [
1967 +
 "nom",
1042 1968
]
1043 1969
1044 1970
[[package]]
1971 +
name = "rustix"
1972 +
version = "1.1.5"
1973 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1974 +
checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d"
1975 +
dependencies = [
1976 +
 "bitflags",
1977 +
 "errno",
1978 +
 "libc",
1979 +
 "linux-raw-sys",
1980 +
 "windows-sys 0.61.2",
1981 +
]
1982 +
1983 +
[[package]]
1984 +
name = "rustix-linux-procfs"
1985 +
version = "0.1.1"
1986 +
source = "registry+https://github.com/rust-lang/crates.io-index"
1987 +
checksum = "2fc84bf7e9aa16c4f2c758f27412dc9841341e16aa682d9c7ac308fe3ee12056"
1988 +
dependencies = [
1989 +
 "once_cell",
1990 +
 "rustix",
1991 +
]
1992 +
1993 +
[[package]]
1045 1994
name = "rustls"
1046 1995
version = "0.23.45"
1047 1996
source = "registry+https://github.com/rust-lang/crates.io-index"
…
38 unchanged lines
1086 2035
]
1087 2036
1088 2037
[[package]]
2038 +
name = "rustversion"
2039 +
version = "1.0.23"
2040 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2041 +
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
2042 +
2043 +
[[package]]
1089 2044
name = "same-file"
1090 2045
version = "1.0.6"
1091 2046
source = "registry+https://github.com/rust-lang/crates.io-index"
…
1 unchanged lines
1093 2048
dependencies = [
1094 2049
 "winapi-util",
1095 2050
]
2051 +
2052 +
[[package]]
2053 +
name = "scopeguard"
2054 +
version = "1.2.0"
2055 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2056 +
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1096 2057
1097 2058
[[package]]
1098 2059
name = "scroll"
…
66 unchanged lines
1165 2126
 "serde",
1166 2127
 "serde_core",
1167 2128
 "zmij",
2129 +
]
2130 +
2131 +
[[package]]
2132 +
name = "serde_spanned"
2133 +
version = "0.6.9"
2134 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2135 +
checksum = "bf41e0cfaf7226dca15e8197172c295a782857fcb97fad1808a166870dee75a3"
2136 +
dependencies = [
2137 +
 "serde",
1168 2138
]
1169 2139
1170 2140
[[package]]
1171 2141
name = "sha2"
2142 +
version = "0.10.9"
2143 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2144 +
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
2145 +
dependencies = [
2146 +
 "cfg-if",
2147 +
 "cpufeatures 0.2.17",
2148 +
 "digest 0.10.7",
2149 +
]
2150 +
2151 +
[[package]]
2152 +
name = "sha2"
1172 2153
version = "0.11.0"
1173 2154
source = "registry+https://github.com/rust-lang/crates.io-index"
1174 2155
checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
1175 2156
dependencies = [
1176 2157
 "cfg-if",
1177 -
 "cpufeatures",
1178 -
 "digest",
2158 +
 "cpufeatures 0.3.1",
2159 +
 "digest 0.11.3",
1179 2160
]
1180 2161
1181 2162
[[package]]
…
2 unchanged lines
1184 2165
source = "registry+https://github.com/rust-lang/crates.io-index"
1185 2166
checksum = "09057cb2149ad4cbd2da1e26b351f9a4c354219421229c69c3063e6f61947c4a"
1186 2167
dependencies = [
1187 -
 "digest",
2168 +
 "digest 0.11.3",
1188 2169
 "keccak",
1189 2170
 "sponge-cursor",
1190 2171
]
…
10 unchanged lines
1201 2182
source = "registry+https://github.com/rust-lang/crates.io-index"
1202 2183
checksum = "28d567dcbaf0049cb8ac2608a76cd95ff9e4412e1899d389ee400918ca7537f5"
1203 2184
dependencies = [
1204 -
 "digest",
2185 +
 "digest 0.11.3",
1205 2186
 "rand_core 0.10.1",
1206 2187
]
1207 2188
…
4 unchanged lines
1212 2193
checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
1213 2194
1214 2195
[[package]]
2196 +
name = "simdutf8"
2197 +
version = "0.1.5"
2198 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2199 +
checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
2200 +
2201 +
[[package]]
1215 2202
name = "similar"
1216 2203
version = "2.7.0"
1217 2204
source = "registry+https://github.com/rust-lang/crates.io-index"
…
6 unchanged lines
1224 2211
checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
1225 2212
1226 2213
[[package]]
2214 +
name = "slab"
2215 +
version = "0.4.12"
2216 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2217 +
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
2218 +
2219 +
[[package]]
1227 2220
name = "smallvec"
1228 2221
version = "1.16.2"
1229 2222
source = "registry+https://github.com/rust-lang/crates.io-index"
1230 2223
checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e"
2224 +
dependencies = [
2225 +
 "serde",
2226 +
]
1231 2227
1232 2228
[[package]]
1233 2229
name = "smawk"
1234 2230
version = "0.3.3"
1235 2231
source = "registry+https://github.com/rust-lang/crates.io-index"
1236 2232
checksum = "e8e2fb0f499abb4d162f2bedad68f5ef91a1682b5a03596ddb67efd37768d100"
2233 +
2234 +
[[package]]
2235 +
name = "socket2"
2236 +
version = "0.6.5"
2237 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2238 +
checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4"
2239 +
dependencies = [
2240 +
 "libc",
2241 +
 "windows-sys 0.61.2",
2242 +
]
1237 2243
1238 2244
[[package]]
1239 2245
name = "spki"
…
59 unchanged lines
1299 2305
1300 2306
[[package]]
1301 2307
name = "synstructure"
2308 +
version = "0.13.2"
2309 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2310 +
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
2311 +
dependencies = [
2312 +
 "proc-macro2",
2313 +
 "quote",
2314 +
 "syn 2.0.119",
2315 +
]
2316 +
2317 +
[[package]]
2318 +
name = "synstructure"
1302 2319
version = "0.14.0"
1303 2320
source = "registry+https://github.com/rust-lang/crates.io-index"
1304 2321
checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
…
1 unchanged lines
1306 2323
 "proc-macro2",
1307 2324
 "quote",
1308 2325
 "syn 3.0.6",
2326 +
]
2327 +
2328 +
[[package]]
2329 +
name = "target-lexicon"
2330 +
version = "0.13.5"
2331 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2332 +
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
2333 +
2334 +
[[package]]
2335 +
name = "termcolor"
2336 +
version = "1.4.1"
2337 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2338 +
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
2339 +
dependencies = [
2340 +
 "winapi-util",
1309 2341
]
1310 2342
1311 2343
[[package]]
…
3 unchanged lines
1315 2347
checksum = "6ecfad6c3abc80a577f2b91c1e412ee57e7a060d430b553c1b0c940974ebcd49"
1316 2348
dependencies = [
1317 2349
 "smawk",
1318 -
 "unicode-width",
2350 +
 "unicode-width 0.2.2",
1319 2351
]
1320 2352
1321 2353
[[package]]
…
1 unchanged lines
1323 2355
version = "1.0.69"
1324 2356
source = "registry+https://github.com/rust-lang/crates.io-index"
1325 2357
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2358 +
dependencies = [
2359 +
 "thiserror-impl 1.0.69",
2360 +
]
2361 +
2362 +
[[package]]
2363 +
name = "thiserror"
2364 +
version = "2.0.21"
2365 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2366 +
checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
1326 2367
dependencies = [
1327 -
 "thiserror-impl",
2368 +
 "thiserror-impl 2.0.21",
1328 2369
]
1329 2370
1330 2371
[[package]]
…
5 unchanged lines
1336 2377
 "proc-macro2",
1337 2378
 "quote",
1338 2379
 "syn 2.0.119",
2380 +
]
2381 +
2382 +
[[package]]
2383 +
name = "thiserror-impl"
2384 +
version = "2.0.21"
2385 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2386 +
checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
2387 +
dependencies = [
2388 +
 "proc-macro2",
2389 +
 "quote",
2390 +
 "syn 3.0.6",
2391 +
]
2392 +
2393 +
[[package]]
2394 +
name = "time"
2395 +
version = "0.3.55"
2396 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2397 +
checksum = "cdb87b95ec50ddfa440816d227a17b2ccbdda963a316a727fda0fc4334f7d134"
2398 +
dependencies = [
2399 +
 "deranged",
2400 +
 "num-conv",
2401 +
 "powerfmt",
2402 +
 "serde_core",
2403 +
 "time-core",
2404 +
 "time-macros",
1339 2405
]
1340 2406
1341 2407
[[package]]
2408 +
name = "time-core"
2409 +
version = "0.1.9"
2410 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2411 +
checksum = "9e1c906769ad99c88eaa54e728060edef082f8e358ff32030cb7c7d315e81109"
2412 +
2413 +
[[package]]
2414 +
name = "time-macros"
2415 +
version = "0.2.32"
2416 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2417 +
checksum = "7e689342a48d2ea927c87ea50cabf8594854bf940e9310208848d680d668ed85"
2418 +
dependencies = [
2419 +
 "num-conv",
2420 +
 "time-core",
2421 +
]
2422 +
2423 +
[[package]]
1342 2424
name = "tinystr"
1343 2425
version = "0.8.4"
1344 2426
source = "registry+https://github.com/rust-lang/crates.io-index"
…
4 unchanged lines
1349 2431
]
1350 2432
1351 2433
[[package]]
2434 +
name = "tokio"
2435 +
version = "1.54.1"
2436 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2437 +
checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
2438 +
dependencies = [
2439 +
 "bytes",
2440 +
 "libc",
2441 +
 "mio",
2442 +
 "pin-project-lite",
2443 +
 "socket2",
2444 +
 "windows-sys 0.61.2",
2445 +
]
2446 +
2447 +
[[package]]
1352 2448
name = "toml"
1353 2449
version = "0.5.11"
1354 2450
source = "registry+https://github.com/rust-lang/crates.io-index"
1355 2451
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
1356 2452
dependencies = [
1357 2453
 "serde",
2454 +
]
2455 +
2456 +
[[package]]
2457 +
name = "toml"
2458 +
version = "0.8.23"
2459 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2460 +
checksum = "dc1beb996b9d83529a9e75c17a1686767d148d70663143c7854d8b4a09ced362"
2461 +
dependencies = [
2462 +
 "serde",
2463 +
 "serde_spanned",
2464 +
 "toml_datetime",
2465 +
 "toml_edit",
2466 +
]
2467 +
2468 +
[[package]]
2469 +
name = "toml_datetime"
2470 +
version = "0.6.11"
2471 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2472 +
checksum = "22cddaf88f4fbc13c51aebbf5f8eceb5c7c5a9da2ac40a13519eb5b0a0e8f11c"
2473 +
dependencies = [
2474 +
 "serde",
2475 +
]
2476 +
2477 +
[[package]]
2478 +
name = "toml_edit"
2479 +
version = "0.22.27"
2480 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2481 +
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
2482 +
dependencies = [
2483 +
 "indexmap",
2484 +
 "serde",
2485 +
 "serde_spanned",
2486 +
 "toml_datetime",
2487 +
 "toml_write",
2488 +
 "winnow",
2489 +
]
2490 +
2491 +
[[package]]
2492 +
name = "toml_write"
2493 +
version = "0.1.2"
2494 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2495 +
checksum = "5d99f8c9a7727884afe522e9bd5edbfc91a3312b36a77b5fb8926e4c31a41801"
2496 +
2497 +
[[package]]
2498 +
name = "tracing"
2499 +
version = "0.1.44"
2500 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2501 +
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
2502 +
dependencies = [
2503 +
 "pin-project-lite",
2504 +
 "tracing-attributes",
2505 +
 "tracing-core",
2506 +
]
2507 +
2508 +
[[package]]
2509 +
name = "tracing-attributes"
2510 +
version = "0.1.31"
2511 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2512 +
checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
2513 +
dependencies = [
2514 +
 "proc-macro2",
2515 +
 "quote",
2516 +
 "syn 2.0.119",
2517 +
]
2518 +
2519 +
[[package]]
2520 +
name = "tracing-core"
2521 +
version = "0.1.36"
2522 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2523 +
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
2524 +
dependencies = [
2525 +
 "once_cell",
1358 2526
]
1359 2527
1360 2528
[[package]]
…
16 unchanged lines
1377 2545
1378 2546
[[package]]
1379 2547
name = "unicode-width"
2548 +
version = "0.1.14"
2549 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2550 +
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
2551 +
2552 +
[[package]]
2553 +
name = "unicode-width"
1380 2554
version = "0.2.2"
1381 2555
source = "registry+https://github.com/rust-lang/crates.io-index"
1382 2556
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
…
32 unchanged lines
1415 2589
 "paste",
1416 2590
 "serde",
1417 2591
 "textwrap",
1418 -
 "toml",
2592 +
 "toml 0.5.11",
1419 2593
 "uniffi_meta",
1420 2594
 "uniffi_udl",
1421 2595
]
…
47 unchanged lines
1469 2643
 "quote",
1470 2644
 "serde",
1471 2645
 "syn 2.0.119",
1472 -
 "toml",
2646 +
 "toml 0.5.11",
1473 2647
 "uniffi_meta",
1474 2648
]
1475 2649
…
47 unchanged lines
1523 2697
source = "registry+https://github.com/rust-lang/crates.io-index"
1524 2698
checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"
1525 2699
dependencies = [
1526 -
 "base64",
2700 +
 "base64 0.22.1",
1527 2701
 "flate2",
1528 2702
 "log",
1529 2703
 "once_cell",
1530 2704
 "rustls",
1531 2705
 "rustls-pki-types",
2706 +
 "serde",
2707 +
 "serde_json",
1532 2708
 "url",
1533 2709
 "webpki-roots 0.26.11",
1534 2710
]
…
23 unchanged lines
1558 2734
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1559 2735
1560 2736
[[package]]
2737 +
name = "version_check"
2738 +
version = "0.9.5"
2739 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2740 +
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2741 +
2742 +
[[package]]
1561 2743
name = "walkdir"
1562 2744
version = "2.5.0"
1563 2745
source = "registry+https://github.com/rust-lang/crates.io-index"
…
8 unchanged lines
1572 2754
version = "0.11.1+wasi-snapshot-preview1"
1573 2755
source = "registry+https://github.com/rust-lang/crates.io-index"
1574 2756
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
2757 +
2758 +
[[package]]
2759 +
name = "wasm-encoder"
2760 +
version = "0.258.3"
2761 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2762 +
checksum = "f64765e43c000fae008a48db8b288e175e237fc9ce20a26586836878c1bee89f"
2763 +
dependencies = [
2764 +
 "leb128fmt",
2765 +
 "wasmparser",
2766 +
]
2767 +
2768 +
[[package]]
2769 +
name = "wasm-metadata"
2770 +
version = "0.258.3"
2771 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2772 +
checksum = "47e10808eb27efde692f1b1706089fe19296728bf872291f5b4e0d50fba88f2f"
2773 +
dependencies = [
2774 +
 "anyhow",
2775 +
 "indexmap",
2776 +
 "wasm-encoder",
2777 +
 "wasmparser",
2778 +
]
2779 +
2780 +
[[package]]
2781 +
name = "wasmparser"
2782 +
version = "0.258.3"
2783 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2784 +
checksum = "fe9269dd817e0e7021bf534ccd9761bc2d64778b6708e41228b8439d75eaa0b1"
2785 +
dependencies = [
2786 +
 "bitflags",
2787 +
 "hashbrown 0.17.1",
2788 +
 "indexmap",
2789 +
 "semver",
2790 +
 "serde",
2791 +
]
1575 2792
1576 2793
[[package]]
2794 +
name = "wasmprinter"
2795 +
version = "0.258.3"
2796 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2797 +
checksum = "14a457ba8670a3db3d357c1aeac3ed4fe378a76054a221789f0df0ea507e292b"
2798 +
dependencies = [
2799 +
 "anyhow",
2800 +
 "termcolor",
2801 +
 "wasmparser",
2802 +
]
2803 +
2804 +
[[package]]
2805 +
name = "wasmtime"
2806 +
version = "49.0.4"
2807 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2808 +
checksum = "36abb25de5518707e5ba96b586366b09db168d2d4976cb9dac57265a317497ea"
2809 +
dependencies = [
2810 +
 "addr2line",
2811 +
 "async-trait",
2812 +
 "bitflags",
2813 +
 "bumpalo",
2814 +
 "cc",
2815 +
 "encoding_rs",
2816 +
 "futures",
2817 +
 "libc",
2818 +
 "log",
2819 +
 "mach2",
2820 +
 "memfd",
2821 +
 "object",
2822 +
 "once_cell",
2823 +
 "postcard",
2824 +
 "pulley-interpreter",
2825 +
 "rayon",
2826 +
 "rustix",
2827 +
 "semver",
2828 +
 "serde",
2829 +
 "serde_derive",
2830 +
 "smallvec",
2831 +
 "target-lexicon",
2832 +
 "wasmparser",
2833 +
 "wasmtime-environ",
2834 +
 "wasmtime-internal-component-macro",
2835 +
 "wasmtime-internal-component-util",
2836 +
 "wasmtime-internal-core",
2837 +
 "wasmtime-internal-cranelift",
2838 +
 "wasmtime-internal-fiber",
2839 +
 "wasmtime-internal-jit-debug",
2840 +
 "wasmtime-internal-jit-icache-coherence",
2841 +
 "wasmtime-internal-unwinder",
2842 +
 "wasmtime-internal-versioned-export-macros",
2843 +
 "windows-sys 0.61.2",
2844 +
]
2845 +
2846 +
[[package]]
2847 +
name = "wasmtime-environ"
2848 +
version = "49.0.4"
2849 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2850 +
checksum = "92f16a4d09fb1fbf2dcfeddb9818e1517a258e13b505b3bfdadcf47a19bf31ca"
2851 +
dependencies = [
2852 +
 "anyhow",
2853 +
 "cpp_demangle",
2854 +
 "cranelift-bforest",
2855 +
 "cranelift-bitset",
2856 +
 "cranelift-entity",
2857 +
 "gimli",
2858 +
 "hashbrown 0.17.1",
2859 +
 "indexmap",
2860 +
 "log",
2861 +
 "object",
2862 +
 "postcard",
2863 +
 "rustc-demangle",
2864 +
 "semver",
2865 +
 "serde",
2866 +
 "serde_derive",
2867 +
 "sha2 0.10.9",
2868 +
 "smallvec",
2869 +
 "target-lexicon",
2870 +
 "wasm-encoder",
2871 +
 "wasmparser",
2872 +
 "wasmprinter",
2873 +
 "wasmtime-internal-component-util",
2874 +
 "wasmtime-internal-core",
2875 +
]
2876 +
2877 +
[[package]]
2878 +
name = "wasmtime-internal-component-macro"
2879 +
version = "49.0.4"
2880 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2881 +
checksum = "d4fca03bd4425856574c0807d1dee16fad43f947feaf4e9ae1d2129596ee4de4"
2882 +
dependencies = [
2883 +
 "anyhow",
2884 +
 "proc-macro2",
2885 +
 "quote",
2886 +
 "syn 2.0.119",
2887 +
 "wasmtime-internal-component-util",
2888 +
 "wasmtime-internal-wit-bindgen",
2889 +
 "wit-parser",
2890 +
]
2891 +
2892 +
[[package]]
2893 +
name = "wasmtime-internal-component-util"
2894 +
version = "49.0.4"
2895 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2896 +
checksum = "4006009fc3598af4e895ab18c6c33d2c6b7c657b1bd0a755ca7ee1abef6f0c16"
2897 +
2898 +
[[package]]
2899 +
name = "wasmtime-internal-core"
2900 +
version = "49.0.4"
2901 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2902 +
checksum = "947a732ad659f42c10ec639706fc8cb1f068dd9a55eebde8a1f24dfd06dfa525"
2903 +
dependencies = [
2904 +
 "hashbrown 0.17.1",
2905 +
 "libm",
2906 +
 "serde",
2907 +
]
2908 +
2909 +
[[package]]
2910 +
name = "wasmtime-internal-cranelift"
2911 +
version = "49.0.4"
2912 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2913 +
checksum = "fbfb8b455d524939e03df42e3e749f8e26e26ba2acd8b08fa00b3bda55686750"
2914 +
dependencies = [
2915 +
 "cranelift-codegen",
2916 +
 "cranelift-control",
2917 +
 "cranelift-entity",
2918 +
 "cranelift-frontend",
2919 +
 "cranelift-native",
2920 +
 "gimli",
2921 +
 "itertools",
2922 +
 "log",
2923 +
 "object",
2924 +
 "pulley-interpreter",
2925 +
 "smallvec",
2926 +
 "target-lexicon",
2927 +
 "thiserror 2.0.21",
2928 +
 "wasmparser",
2929 +
 "wasmtime-environ",
2930 +
 "wasmtime-internal-core",
2931 +
 "wasmtime-internal-unwinder",
2932 +
 "wasmtime-internal-versioned-export-macros",
2933 +
]
2934 +
2935 +
[[package]]
2936 +
name = "wasmtime-internal-fiber"
2937 +
version = "49.0.4"
2938 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2939 +
checksum = "bd8aa8711f68b2cdd94c2b85ba5c8317edaa1ac4ee0a0534b957123680239307"
2940 +
dependencies = [
2941 +
 "cc",
2942 +
 "libc",
2943 +
 "rustix",
2944 +
 "wasmtime-environ",
2945 +
 "wasmtime-internal-versioned-export-macros",
2946 +
 "windows-sys 0.61.2",
2947 +
]
2948 +
2949 +
[[package]]
2950 +
name = "wasmtime-internal-jit-debug"
2951 +
version = "49.0.4"
2952 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2953 +
checksum = "e873e4504faf50aa8ce255d6ea7210d87b39d5f379c2486782e2c5f179c70ca8"
2954 +
dependencies = [
2955 +
 "cc",
2956 +
 "wasmtime-internal-versioned-export-macros",
2957 +
]
2958 +
2959 +
[[package]]
2960 +
name = "wasmtime-internal-jit-icache-coherence"
2961 +
version = "49.0.4"
2962 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2963 +
checksum = "197ab1fda5da958a5c0b8a97eb241beafc48ac568b82ef4f12f38d6866c74173"
2964 +
dependencies = [
2965 +
 "libc",
2966 +
 "wasmtime-internal-core",
2967 +
 "windows-sys 0.61.2",
2968 +
]
2969 +
2970 +
[[package]]
2971 +
name = "wasmtime-internal-unwinder"
2972 +
version = "49.0.4"
2973 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2974 +
checksum = "5577f3a5a979a7c3b1b23c1e9f13e70a8583acc8828471ec56f282117fc4952b"
2975 +
dependencies = [
2976 +
 "cranelift-codegen",
2977 +
 "log",
2978 +
 "object",
2979 +
 "wasmtime-environ",
2980 +
]
2981 +
2982 +
[[package]]
2983 +
name = "wasmtime-internal-versioned-export-macros"
2984 +
version = "49.0.4"
2985 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2986 +
checksum = "f6399c9c4050ed431cf66e21c05fadd6f9731db44476f452f8c7142b4597b883"
2987 +
dependencies = [
2988 +
 "proc-macro2",
2989 +
 "quote",
2990 +
 "syn 2.0.119",
2991 +
]
2992 +
2993 +
[[package]]
2994 +
name = "wasmtime-internal-wit-bindgen"
2995 +
version = "49.0.4"
2996 +
source = "registry+https://github.com/rust-lang/crates.io-index"
2997 +
checksum = "b4eaf45d4da7681d234bb6efd846b4a528b08a75384a7fc23f125d0145364b06"
2998 +
dependencies = [
2999 +
 "anyhow",
3000 +
 "bitflags",
3001 +
 "heck",
3002 +
 "indexmap",
3003 +
 "wit-component",
3004 +
 "wit-parser",
3005 +
]
3006 +
3007 +
[[package]]
3008 +
name = "wasmtime-wasi"
3009 +
version = "49.0.4"
3010 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3011 +
checksum = "821e45765c35555d3b0bdf9277cb99478f7d1f29a17b3315ba76e01220f02a38"
3012 +
dependencies = [
3013 +
 "async-trait",
3014 +
 "bitflags",
3015 +
 "bytes",
3016 +
 "cap-primitives",
3017 +
 "futures",
3018 +
 "rand 0.10.3",
3019 +
 "rustix",
3020 +
 "rustix-linux-procfs",
3021 +
 "thiserror 2.0.21",
3022 +
 "tokio",
3023 +
 "tracing",
3024 +
 "url",
3025 +
 "wasmtime",
3026 +
 "wasmtime-wasi-io",
3027 +
 "wiggle",
3028 +
 "windows-sys 0.61.2",
3029 +
 "winx",
3030 +
]
3031 +
3032 +
[[package]]
3033 +
name = "wasmtime-wasi-io"
3034 +
version = "49.0.4"
3035 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3036 +
checksum = "8cdff38d1c730bdaf4fcfbe0eedf3265fb9c7a4deb119deecbfc1c1778950716"
3037 +
dependencies = [
3038 +
 "async-trait",
3039 +
 "bytes",
3040 +
 "futures",
3041 +
 "tracing",
3042 +
 "wasmtime",
3043 +
]
3044 +
3045 +
[[package]]
3046 +
name = "wast"
3047 +
version = "35.0.2"
3048 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3049 +
checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68"
3050 +
dependencies = [
3051 +
 "leb128",
3052 +
]
3053 +
3054 +
[[package]]
1577 3055
name = "webpki-roots"
1578 3056
version = "0.26.11"
1579 3057
source = "registry+https://github.com/rust-lang/crates.io-index"
…
18 unchanged lines
1598 3076
checksum = "998d2c24ec099a87daf9467808859f9d82b61f1d9c9701251aea037f514eae0e"
1599 3077
dependencies = [
1600 3078
 "nom",
3079 +
]
3080 +
3081 +
[[package]]
3082 +
name = "wiggle"
3083 +
version = "49.0.4"
3084 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3085 +
checksum = "af3872869836d404f722e2361f869c09630e43a73fcc7060f7892a929b74b6a3"
3086 +
dependencies = [
3087 +
 "bitflags",
3088 +
 "thiserror 2.0.21",
3089 +
 "tracing",
3090 +
 "wasmtime",
3091 +
 "wasmtime-environ",
3092 +
 "wiggle-macro",
3093 +
]
3094 +
3095 +
[[package]]
3096 +
name = "wiggle-generate"
3097 +
version = "49.0.4"
3098 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3099 +
checksum = "cf7e31dec6de37e7e848aecbad54777dd246cd440a1a547ab1a1e31c27f55e49"
3100 +
dependencies = [
3101 +
 "heck",
3102 +
 "proc-macro2",
3103 +
 "quote",
3104 +
 "syn 2.0.119",
3105 +
 "wasmtime-environ",
3106 +
 "witx",
3107 +
]
3108 +
3109 +
[[package]]
3110 +
name = "wiggle-macro"
3111 +
version = "49.0.4"
3112 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3113 +
checksum = "a2af323f33b28ea84b24e2bccef19e51c7a75aa1d2929280ad1a4865f2877dcc"
3114 +
dependencies = [
3115 +
 "proc-macro2",
3116 +
 "quote",
3117 +
 "syn 2.0.119",
3118 +
 "wiggle-generate",
1601 3119
]
1602 3120
1603 3121
[[package]]
…
92 unchanged lines
1696 3214
version = "0.52.6"
1697 3215
source = "registry+https://github.com/rust-lang/crates.io-index"
1698 3216
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
3217 +
3218 +
[[package]]
3219 +
name = "winnow"
3220 +
version = "0.7.15"
3221 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3222 +
checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945"
3223 +
dependencies = [
3224 +
 "memchr",
3225 +
]
3226 +
3227 +
[[package]]
3228 +
name = "winx"
3229 +
version = "0.36.4"
3230 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3231 +
checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d"
3232 +
dependencies = [
3233 +
 "bitflags",
3234 +
 "windows-sys 0.52.0",
3235 +
]
1699 3236
1700 3237
[[package]]
3238 +
name = "wit-component"
3239 +
version = "0.258.3"
3240 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3241 +
checksum = "f0fca88950af0c1f42bc77e17315e48798b8d68340171b6d204f62bc19a878a6"
3242 +
dependencies = [
3243 +
 "anyhow",
3244 +
 "bitflags",
3245 +
 "indexmap",
3246 +
 "log",
3247 +
 "serde",
3248 +
 "serde_derive",
3249 +
 "serde_json",
3250 +
 "wasm-encoder",
3251 +
 "wasm-metadata",
3252 +
 "wasmparser",
3253 +
 "wit-parser",
3254 +
]
3255 +
3256 +
[[package]]
3257 +
name = "wit-parser"
3258 +
version = "0.258.3"
3259 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3260 +
checksum = "72a2127663dcf3ee16614fb0e3c33d5c6c66fec9dad317a8b0fdd3869487a533"
3261 +
dependencies = [
3262 +
 "anyhow",
3263 +
 "hashbrown 0.17.1",
3264 +
 "id-arena",
3265 +
 "indexmap",
3266 +
 "log",
3267 +
 "semver",
3268 +
 "serde",
3269 +
 "serde_derive",
3270 +
 "serde_json",
3271 +
 "unicode-ident",
3272 +
 "wasmparser",
3273 +
]
3274 +
3275 +
[[package]]
3276 +
name = "witx"
3277 +
version = "0.9.1"
3278 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3279 +
checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b"
3280 +
dependencies = [
3281 +
 "anyhow",
3282 +
 "log",
3283 +
 "thiserror 1.0.69",
3284 +
 "wast",
3285 +
]
3286 +
3287 +
[[package]]
1701 3288
name = "writeable"
1702 3289
version = "0.6.4"
1703 3290
source = "registry+https://github.com/rust-lang/crates.io-index"
1704 3291
checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
3292 +
3293 +
[[package]]
3294 +
name = "x509-parser"
3295 +
version = "0.18.1"
3296 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3297 +
checksum = "d43b0f71ce057da06bc0851b23ee24f3f86190b07203dd8f567d0b706a185202"
3298 +
dependencies = [
3299 +
 "asn1-rs",
3300 +
 "data-encoding",
3301 +
 "der-parser",
3302 +
 "lazy_static",
3303 +
 "nom",
3304 +
 "oid-registry",
3305 +
 "ring",
3306 +
 "rusticata-macros",
3307 +
 "thiserror 2.0.21",
3308 +
 "time",
3309 +
]
3310 +
3311 +
[[package]]
3312 +
name = "yasna"
3313 +
version = "0.6.0"
3314 +
source = "registry+https://github.com/rust-lang/crates.io-index"
3315 +
checksum = "b5f6765e852b9b4dc8e2a76843e4d64d1cea8e79bcde0b6901aea8e7c7f08282"
3316 +
dependencies = [
3317 +
 "bit-vec",
3318 +
 "time",
3319 +
]
1705 3320
1706 3321
[[package]]
1707 3322
name = "yoke"
…
15 unchanged lines
1723 3338
 "proc-macro2",
1724 3339
 "quote",
1725 3340
 "syn 3.0.6",
1726 -
 "synstructure",
3341 +
 "synstructure 0.14.0",
1727 3342
]
1728 3343
1729 3344
[[package]]
…
34 unchanged lines
1764 3379
 "proc-macro2",
1765 3380
 "quote",
1766 3381
 "syn 3.0.6",
1767 -
 "synstructure",
3382 +
 "synstructure 0.14.0",
1768 3383
]
1769 3384
1770 3385
[[package]]
…
77 unchanged lines
modified rust-core/Cargo.toml +5 −1
…
6 unchanged lines
7 7
crate-type = ["cdylib", "lib"]
8 8
9 9
[dependencies]
10 -
oxy-core = { path = "../oxygen/crates/oxy-core" }
10 +
# Oxygen as OxygenFlow pins it, so the runner and this crate share one oxy-core.
11 +
oxy-core = { path = "../oxygenflow/deps/oxygen/crates/oxy-core" }
12 +
# OxygenFlow's runner, run in the app's own process (oxygenhub-android#8).
13 +
flow = { path = "../oxygenflow/crates/flow" }
11 14
uniffi = { version = "0.28", features = ["cli"] }
15 +
anyhow = "1"
12 16
13 17
[build-dependencies]
14 18
uniffi = { version = "0.28", features = ["build"] }
modified rust-core/src/lib.rs +66 −5
1 1
uniffi::setup_scaffolding!();
2 2
3 -
// A simple test function to ensure the Kotlin <-> Rust bridge is working
4 -
// We will eventually wrap oxy_core functions here.
3 +
use std::path::Path;
4 +
5 +
// A simple test function to ensure the Kotlin <-> Rust bridge is working.
5 6
#[uniffi::export]
6 7
pub fn oxygen_greeting(name: String) -> String {
7 8
    format!("Hello, {}! Oxygen Native Core is active.", name)
9 +
}
10 +
11 +
/// Why a runner call failed, in OxygenFlow's words.
12 +
#[derive(Debug, uniffi::Error)]
13 +
pub enum RunnerError {
14 +
    Failed { reason: String },
15 +
}
16 +
17 +
impl std::fmt::Display for RunnerError {
18 +
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
19 +
        match self {
20 +
            RunnerError::Failed { reason } => f.write_str(reason),
21 +
        }
22 +
    }
23 +
}
24 +
25 +
impl std::error::Error for RunnerError {}
26 +
27 +
fn failed(e: anyhow::Error) -> RunnerError {
28 +
    RunnerError::Failed { reason: format!("{e:#}") }
29 +
}
30 +
31 +
/// The phone as an OxygenFlow runner (oxygenhub-android#8): OxygenFlow's
32 +
/// own runner, built into the app, offering only the WASM tier. `home` is
33 +
/// the app's directory for it; `register` keeps the runner's credential
34 +
/// there (runner.toml), as `flow runner register` does on a host.
35 +
#[uniffi::export]
36 +
pub fn runner_register(home: String, hub: String, token: String, name: String) -> Result<String, RunnerError> {
37 +
    let h = flow::home::Home::locate(Some(Path::new(&home))).map_err(failed)?;
38 +
    let r = flow::runner::register(&h, &hub, &token, &name, None, vec!["android".into()]).map_err(failed)?;
39 +
    Ok(r.name)
8 40
}
9 41
10 -
// In the future, we can add functions like:
11 -
// #[uniffi::export]
12 -
// pub fn get_repo_status(path: String) -> StatusResult { ... }
42 +
/// Whether `home` holds a registration, and so can serve.
43 +
#[uniffi::export]
44 +
pub fn runner_is_registered(home: String) -> bool {
45 +
    Path::new(&home).join(flow::home::RUNNER_TOML).is_file()
46 +
}
47 +
48 +
/// Claim and run jobs until [`runner_stop`] drains the runner: returns
49 +
/// once the jobs it holds are done and reported. Blocks, so call it from
50 +
/// a thread of its own (the app's runner service).
51 +
#[uniffi::export]
52 +
pub fn runner_serve(home: String) -> Result<(), RunnerError> {
53 +
    let h = flow::home::Home::locate(Some(Path::new(&home))).map_err(failed)?;
54 +
    flow::runner::serve_embedded(&h).map_err(failed)
55 +
}
56 +
57 +
/// Drain the runner: claim nothing more, finish and report what it
58 +
/// holds, then [`runner_serve`] returns. For leaving the charger or the
59 +
/// allowed network, or the owner stopping it.
60 +
#[uniffi::export]
61 +
pub fn runner_stop() {
62 +
    flow::runner::stop();
63 +
}
64 +
65 +
/// The tiers this phone offers (the WASM tier), and why not the others.
66 +
#[uniffi::export]
67 +
pub fn runner_tiers(home: String) -> Vec<String> {
68 +
    let Ok(h) = flow::home::Home::locate(Some(Path::new(&home))) else { return vec![] };
69 +
    match flow::runner::tiers(&h) {
70 +
        Ok((have, _)) => have,
71 +
        Err(_) => vec![],
72 +
    }
73 +
}