1// Copyright 2025 International Digital Economy Academy
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15///|
16type Req
17
18///|
19pub trait trait ToReq {
to_req(Self) -> Req
}
ToReq {
20 (Self) -> Req
to_req(type parameter Self
Self) -> type Req
Req
21}
22
23///|
24pub trait trait Cancelable {
cancel(Self) -> Unit raise Errno
}
Cancelable: trait ToReq {
to_req(Self) -> Req
}
ToReq {
25 (Self) -> Unit raise Errno
cancel(type parameter Self
Self) -> Unit
Unit raise type! Errno Status
Errno = _
26}
27
28///|
29extern "c" fn uv_cancel(req : type Req
Req) -> Int
Int = "moonbit_uv_cancel"
30
31///|
32impl trait Cancelable {
cancel(Self) -> Unit raise Errno
}
Cancelable with (self : Self) -> Unit raise Errno
cancel(Self
self : type parameter Self
Self) -> Unit
Unit raise type! Errno Status
Errno {
33 let Int
result = (req : Req) -> Int
uv_cancel(Self
self.(Self) -> Req
to_req())
34 if Int
result (self_ : Int, other : Int) -> Bool
< 0 {
35 raise type! Errno Status
Errno::(errno : Int) -> Errno
of_int(Int
result)
36 }
37}
38
39///|
40pub impl trait Cancelable {
cancel(Self) -> Unit raise Errno
}
Cancelable for type Fs
Fs
41