mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-07 06:53:09 -06:00
Marshal and Unmarshal methods for roomserver input api
This commit is contained in:
parent
094345830e
commit
1082b2adf3
|
|
@ -1,6 +1,10 @@
|
||||||
// Package api provides the types that are used to communicate with the roomserver.
|
// Package api provides the types that are used to communicate with the roomserver.
|
||||||
package api
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// KindOutlier event fall outside the contiguous event graph.
|
// KindOutlier event fall outside the contiguous event graph.
|
||||||
// We do not have the state for these events.
|
// We do not have the state for these events.
|
||||||
|
|
@ -36,7 +40,51 @@ type InputRoomEvent struct {
|
||||||
// For example many matrix events forget to reference the m.room.create event even though it is needed for auth.
|
// For example many matrix events forget to reference the m.room.create event even though it is needed for auth.
|
||||||
// (since synapse allows this to happen we have to allow it as well.)
|
// (since synapse allows this to happen we have to allow it as well.)
|
||||||
AuthEventIDs []string
|
AuthEventIDs []string
|
||||||
|
// Whether the state is supplied as a list of event IDs or whether it
|
||||||
|
// should be derived from the state at the previous events.
|
||||||
|
HasState bool
|
||||||
// Optional list of state event IDs forming the state before this event.
|
// Optional list of state event IDs forming the state before this event.
|
||||||
// These state events must have already been persisted.
|
// These state events must have already been persisted.
|
||||||
StateEventIDs []string
|
StateEventIDs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON implements json.Unmarshaller
|
||||||
|
func (ire *InputRoomEvent) UnmarshalJSON(data []byte) error {
|
||||||
|
var content struct {
|
||||||
|
Kind int
|
||||||
|
Event *json.RawMessage
|
||||||
|
AuthEventIDs []string
|
||||||
|
StateEventIDs []string
|
||||||
|
HasState bool
|
||||||
|
}
|
||||||
|
if err := json.Unmarshal(data, &content); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ire.Kind = content.Kind
|
||||||
|
ire.AuthEventIDs = content.AuthEventIDs
|
||||||
|
ire.StateEventIDs = content.StateEventIDs
|
||||||
|
ire.HasState = content.HasState
|
||||||
|
if content.Event != nil {
|
||||||
|
ire.Event = []byte(*content.Event)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON implements json.Marshaller
|
||||||
|
func (ire InputRoomEvent) MarshalJSON() ([]byte, error) {
|
||||||
|
event := json.RawMessage(ire.Event)
|
||||||
|
content := struct {
|
||||||
|
Kind int
|
||||||
|
Event *json.RawMessage
|
||||||
|
AuthEventIDs []string
|
||||||
|
StateEventIDs []string
|
||||||
|
HasState bool
|
||||||
|
}{
|
||||||
|
Kind: ire.Kind,
|
||||||
|
AuthEventIDs: ire.AuthEventIDs,
|
||||||
|
StateEventIDs: ire.StateEventIDs,
|
||||||
|
Event: &event,
|
||||||
|
HasState: ire.HasState,
|
||||||
|
}
|
||||||
|
return json.Marshal(&content)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ func processRoomEvent(db RoomEventDatabase, input api.InputRoomEvent) error {
|
||||||
if stateAtEvent.BeforeStateSnapshotNID == 0 {
|
if stateAtEvent.BeforeStateSnapshotNID == 0 {
|
||||||
// We haven't calculated a state for this event yet.
|
// We haven't calculated a state for this event yet.
|
||||||
// Lets calculate one.
|
// Lets calculate one.
|
||||||
if input.StateEventIDs != nil {
|
if input.HasState {
|
||||||
// We've been told what the state at the event is so we don't need to calculate it.
|
// We've been told what the state at the event is so we don't need to calculate it.
|
||||||
// Check that those state events are in the database and store the state.
|
// Check that those state events are in the database and store the state.
|
||||||
entries, err := db.StateEntriesForEventIDs(input.StateEventIDs)
|
entries, err := db.StateEntriesForEventIDs(input.StateEventIDs)
|
||||||
|
|
@ -89,6 +89,11 @@ func processRoomEvent(db RoomEventDatabase, input api.InputRoomEvent) error {
|
||||||
db.SetState(stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID)
|
db.SetState(stateAtEvent.EventNID, stateAtEvent.BeforeStateSnapshotNID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if input.Kind == api.KindBackfill {
|
||||||
|
// Backfill is not implemented.
|
||||||
|
panic("Not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
// Update the extremities of the event graph for the room
|
// Update the extremities of the event graph for the room
|
||||||
if err := updateLatestEvents(db, roomNID, stateAtEvent, event); err != nil {
|
if err := updateLatestEvents(db, roomNID, stateAtEvent, event); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -102,5 +107,5 @@ func processRoomEvent(db RoomEventDatabase, input api.InputRoomEvent) error {
|
||||||
// - The event itself
|
// - The event itself
|
||||||
// - The visiblity of the event, i.e. who is allowed to see the event.
|
// - The visiblity of the event, i.e. who is allowed to see the event.
|
||||||
// - The changes to the current state of the room.
|
// - The changes to the current state of the room.
|
||||||
panic("Not implemented")
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue